Параметру 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
Ошибка MttDemo, не найден компонент MqttGeteway ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1719122888
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";
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78657890/mttdemo-error-cant-found-bean-mqttgeteway[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия