i try to integrate mqtt in my Spring Boot Java Project.
My depdency:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>jackson-module-kotlin</artifactId>
<groupId>com.fasterxml.jackson.module</groupId>
</exclusion>
</exclusions>
</dependency>
I created a Java-Class named MqttClient. Here i try this:
IMqttClient publisher = new org.eclipse.paho.client.mqttv3.MqttClient("pfad", publisherId);
I get a Error here: org.eclipse.paho.client.mqttv3.MqttClient
Error:Unhandled exception: org.eclipse.paho.client.mqttv3.MqttException
Any idea whats wrong?
Can't figure out what is the problem? I did solve the same problem in following fashion. See if it works for you. I have a mqtt gateway class defined as below.
import org.springframework.integration.annotation.MessagingGateway;
@MessagingGateway(defaultRequestChannel = "mqttPromiseOutboundChannel")
public interface MqttPromiseGateway {
void sendToMqtt(String data);
}
When I want to send a message to Mqtt, I autowire the defined gateway class.
@Autowired
private MqttPromiseGateway mqttPromiseGateway;
Now I can send a message over that Mqtt channel using that gateway.
mqttPromiseGateway.sendToMqtt(content);
We also define a service for MqttProducer.
@Service
public class DemoMqttProducer {
@Bean
public MqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
MqttConnectOptions options = new MqttConnectOptions();
options.setServerURIs(new String[] { "tcp://localhost:1883" });
options.setUserName("myusername");
options.setPassword("mypassword#".toCharArray());
factory.setConnectionOptions(options);
return factory;
}
@Bean
@ServiceActivator(inputChannel = "mqttPromiseOutboundChannel")
public MessageHandler mqttPromiseOutbound() {
MqttPahoMessageHandler messageHandler =
new MqttPahoMessageHandler("testClient", mqttClientFactory());
messageHandler.setAsync(true);
messageHandler.setDefaultTopic("Promise");
return messageHandler;
}
@Bean
public MessageChannel mqttOutboundChannel() {
return new DirectChannel();
}
@Bean
public MessageChannel mqttPromiseOutboundChannel() {
return new DirectChannel();
}
@Bean
public IntegrationFlow mqttInFlow() {
return IntegrationFlows.from(mqttInbound())
.transform(p -> p + ", received from MQTT")
.handle(logger())
.get();
}
@Bean
public MessageProducerSupport mqttInbound() {
MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("siSampleConsumer",
mqttClientFactory(), "Promise");
adapter.setCompletionTimeout(5000);
adapter.setConverter(new DefaultPahoMessageConverter());
adapter.setQos(1);
return adapter;
}
}
The method mqttInflow will get the incoming message and send it to logger. If you want to handle it differently, you need to change that method.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.