Ошибка MttDemo, не найден компонент MqttGetewayJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка MttDemo, не найден компонент MqttGeteway

Сообщение Anonymous »

Параметру 0 конструктора в com.mqtt.ecmqtt.controller.MqttController требовался bean-компонент типа com.mqtt.ecmqtt.mqtt.gateway.MqttGateway, который не удалось найти.
Почему там написано такого компонента нет?
Сведения об ошибке: https://github.com/QingYiShiDeCha/Mqtt-Demo
Я пытался настроить класс реализации Mqttgateway, но консоль по-прежнему выдает ошибку и имеет значение null. После ее удаления появилось сообщение об отсутствии bean-компонента. Что это за проблема? Как решить?
mqtt:
broker-url:
- tcp://broker-cn.emqx.io:1883
username: emqx
password: public
client-id: mqttClientId
connection-timeout: 3000
default-topic: test/topic
subscription-topic:
- qingcha
- topicA

@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "mqtt")
public class MqttProperties {
private String[] brokerUrl;
private String clientId;
private String username;
private String password;
private String defaultTopic;
private Long connectionTimeout;
private String[] subscriptionTopic;
}

@Configuration
@IntegrationComponentScan
public class MqttConfig {
@Autowired
private MqttProperties mqttProperties;

@Bean
public MqttConnectOptions mqttConnectOptions() {
MqttConnectOptions options = new MqttConnectOptions();
options.setUserName(mqttProperties.getUsername());
options.setPassword(mqttProperties.getPassword().toCharArray());
options.setServerURIs(mqttProperties.getBrokerUrl());
return options;
}

/**
* 创建MqttPahoClientFactory,设置MQTT Broker连接属性,如果使用SSL验证,也在这里设置。
*
* @return factory
*/
@Bean
public MqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
factory.setConnectionOptions(mqttConnectOptions());

return factory;
}

/**
* 发送通道
*/
@Bean
public MessageChannel mqttOutputChannel() {
return new DirectChannel();
}

@Bean
@ServiceActivator(inputChannel = "mqttOutputChannel")
public MessageHandler messageHandler() {
MqttPahoMessageHandler handler = new MqttPahoMessageHandler(mqttProperties.getClientId(), mqttClientFactory());
// 如果设置为true, 即异步, 发送消息将不对阻塞
handler.setAsync(true);
handler.setDefaultTopic(mqttProperties.getDefaultTopic());
return handler;
}

/**
* 接收通道
*/
@Bean
public MessageChannel mqttInputChannel() {
return new DirectChannel();
}

/**
* 配置client监听的topic
*/
@Bean
public MessageProducer messageProducer() {
MqttPahoMessageDrivenChannelAdapter adapter =
new MqttPahoMessageDrivenChannelAdapter(mqttProperties.getClientId() + "_input", mqttClientFactory(), mqttProperties.getSubscriptionTopic());
adapter.setCompletionTimeout(mqttProperties.getConnectionTimeout());
adapter.setConverter(new DefaultPahoMessageConverter());
adapter.setOutputChannel(mqttInputChannel());
return adapter;
}

@Bean
@ServiceActivator(inputChannel = "mqttInputChannel")
public MessageHandler mqttInputHandler() {
return new ReceiveMessageHandler();
}
}

@Slf4j
public class ReceiveMessageHandler implements MessageHandler {

@Resource
private SensorMapper sensorMapper;

@Override
public void handleMessage(Message message) throws MessagingException {
String topic = Objects.requireNonNull(message.getHeaders().get("mqtt_receivedTopic")).toString();
log.info("Receive message from topic {}", topic);
if ("hello".equalsIgnoreCase(topic)) {
log.info("hello: {}", message.getPayload());
} else {
try {
String payload = message.getPayload().toString();
SensorData sensorData = JSON.parseObject(payload, SensorData.class);
log.info("receive data: {}", sensorData);

sensorMapper.insert(sensorData);

} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
}

}
}

@MessagingGateway(defaultRequestChannel = "mqttOutputChannel")
public interface MqttGateway {
/**
* 向默认topic发送消息
*
* @param data 数据
*/
void sendToMqtt(String data);

/**
* 指定 topic 进行消息发送
*
* @param data 数据
* @param topic 主题
*/
void sendToMqtt(String data, @Header(MqttHeaders.TOPIC) String topic);

/**
* 指定 topic 和 qos 进行消息发送
*
* @param data 数据
* @param topic 主题
* @param qos 服务质量
*/
void sendToMqtt(String data, @Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos);
}

@RestController
@RequestMapping("/mqtt")
@RequiredArgsConstructor
public class MqttController {
private final MqttGateway mqttGateway;

@PostMapping("/send")
public String sendMsg(String data) {
mqttGateway.sendToMqtt(data);
return "success";
}

/**
* 发送mqtt消息
*
* @param data 负载
* @param topic 话题
* @return String
*/
@PostMapping("/topic/send")
public String sendMsg(String data, String topic) {
mqttGateway.sendToMqtt(data, topic);
return "success";
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... qttgeteway
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»