免费----java连接mqtt教程,idea配置mqtt,注意引入配置一定要一致

自己有一个mqtt的平台

自己可以在mqtt官网下载一个

第一步:引入mqtt依赖包

<dependency>
   		<groupId>org.springframework.integration</groupId>
   		<artifactId>spring-integration-mqtt</artifactId>
   	</dependency>

这两个也可以加上,springboot配合使用的部分配置

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-integration</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.integration</groupId>
			<artifactId>spring-integration-stream</artifactId>
		</dependency>

第二步:创建一个MqttConfig.java,存放配置


import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.core.MessageProducer;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
import org.springframework.messaging.*;

@Configuration
public class MqttConfig { 

}

连接mqtt服务器的工厂,我这里用的是工厂的配置,我使用不了 factory.setConnectOptions(options); 这个方法,这是和其他不同的

 /**
    * 连接mqtt服务器的工厂
    * @return
    */
   @Bean
   public MqttPahoClientFactory mqttClientFactory() {

       DefaultMqttPahoClientFactory  factory = new DefaultMqttPahoClientFactory();
       //connect 我使用不了  factory.setConnectOptions(options);  
//        MqttConnectOptions options = new MqttConnectOptions();
//        options.setServerURIs(new String[] { "tcp://183.193.73.222:1883" });
//        options.setUserName("fudan");
//        options.setPassword("fudan".toCharArray());
//工厂配置
       factory.setUserName("fudan");
       factory.setServerURIs("tcp://183.193.73.222:1883" );
       factory.setPassword("fudan");
       return factory;
   }

下面是config的完整文档,注意看引入的springboot的包是否一致,否则方法不能使用

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.core.MessageProducer;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
import org.springframework.messaging.*;

@Configuration
public class MqttConfig {

    /**
     * 连接mqtt服务器的工厂
     * @return
     */
    @Bean
    public MqttPahoClientFactory mqttClientFactory() {

        DefaultMqttPahoClientFactory  factory = new DefaultMqttPahoClientFactory();
//        MqttConnectOptions options = new MqttConnectOptions();
//        options.setServerURIs(new String[] { "tcp://183.193.73.222:1883" });
//        options.setUserName("fudan");
//        options.setPassword("fudan".toCharArray());
//        factory.setConnectOptions(options);
        factory.setUserName("fudan");
        factory.setServerURIs("tcp://183.193.73.222:1883" );
        factory.setPassword("fudan");
        return factory;
    }

    /**
     * 入站通道
     * @return
     */
    @Bean
    public MessageChannel mqttInputChannel() {

        return new DirectChannel();
    }


    /**
     * 入站
     */
    @Bean
    public MessageProducer inbound(  ) {

        MqttPahoMessageDrivenChannelAdapter adapter =  new MqttPahoMessageDrivenChannelAdapter("conClient-paho",mqttClientFactory(), "home");
        adapter.setCompletionTimeout(5000);
        adapter.setConverter(new DefaultPahoMessageConverter());
        //设置一次需要应答
        adapter.setQos(1);
        //设置对外的通道
        adapter.setOutputChannel(mqttInputChannel());
        return adapter;
    }
    /**
     * 收消息的处理器,用于如何处理消息
     * mqttInputChannel 代表的是收消息的通道对象的id
     * @return
     */
    @Bean
    @ServiceActivator(inputChannel = "mqttInputChannel")
    public MessageHandler handler() {

        return new MessageHandler() {

            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                MessageHeaders headers = message.getHeaders();
                String topic =headers.get("mqtt_topic").toString();
                String payload = message.getPayload().toString();
                // 根据主题分别进行消息处理。
                if (topic.matches("home")) { // 匹配:1/sensor
                    String sensorSn = topic.split("/")[0];
                    System.out.println("传感器" + sensorSn + ": 的消息: " + payload);
                } else if (topic.equals("collector")) {
                    System.out.println("采集器的消息:" + payload);
                } else {
                    System.out.println("丢弃消息:主题[" + topic  + "],负载:" + payload);
                }
//                System.out.println(topic+"----"+payload);
            }

        };
    }

    /**
     * 出站通道
     * @return
     */
    @Bean
    public MessageChannel mqttOutboundChannel() {

        return new DirectChannel();
    }
    //出站
    @Bean
    @ServiceActivator(inputChannel = "mqttOutboundChannel")
    public MessageHandler outbound() {

        MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler("publishClie", mqttClientFactory());
        messageHandler.setAsync(true);
        messageHandler.setDefaultTopic("command");
        messageHandler.setDefaultQos(1);

        DefaultPahoMessageConverter defaultPahoMessageConverter = new DefaultPahoMessageConverter();
        messageHandler.setConverter(defaultPahoMessageConverter);
        return messageHandler;
    }



}

需要有个gateway 发送到mqtt消息的文件

import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.messaging.handler.annotation.Header;

@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MyGateway {

    void sendToMqtt(String payload);

    void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic,String payload);

    void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic,@Header(MqttHeaders.QOS)int qos,String payload);

    void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic,@Header(MqttHeaders.QOS)int qos,byte[] payload);
}

message对象里面放发送的消息


public class MyMessage {

    private String topic;
    private String content;

    public String getTopic() {
        return topic;
    }

    public void setTopic(String topic) {
        this.topic = topic;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

测试连接

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class MqttController {


   @Resource
   private MyGateway myGateway;


   @PostMapping("/sendMsg")
   public String sendMsg(@RequestBody MyMessage msg){

       myGateway.sendToMqtt(msg.getTopic(),1,msg.getContent());
       return "Topic : "+msg.getTopic() + "  ,message : "+msg.getContent();
   }
}

!!!注意,配置文件不同,是连接不通的。

如有问题,可以在评论区询问博主,为大家提供免费学习

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
paho-mqtt是一个Python实现的MQTT客户端库,用于与MQTT代理进行通信。要配置paho-mqtt,你需要进行以下步骤: 1. 安装paho-mqtt库:使用pip命令安装paho-mqtt库,可以在终端或命令提示符中运行以下命令: ``` pip install paho-mqtt ``` 2. 导入paho-mqtt库:在Python代码中导入paho-mqtt库,可以使用以下语句: ```python import paho.mqtt.client as mqtt ``` 3. 创建MQTT客户端实例:使用mqtt.Client()方法创建一个MQTT客户端实例,例如: ```python client = mqtt.Client() ``` 4. 配置MQTT代理连接参数:设置MQTT代理的连接参数,包括代理地址、端口号、用户名和密码(如果需要认证)。可以使用以下方法进行配置: ```python client.username_pw_set(username, password) # 设置用户名和密码 client.connect(broker, port) # 设置代理地址和端口号 ``` 5. 定义回调函数:为了处理与MQTT代理之间的通信,你需要定义一些回调函数。例如,可以定义on_connect()函数来处理与代理的连接建立事件,定义on_message()函数来处理接收到的消息等。 6. 订阅主题或发布消息:使用client.subscribe()方法订阅主题,使用client.publish()方法发布消息。例如: ```python client.subscribe(topic) # 订阅主题 client.publish(topic, payload) # 发布消息 ``` 7. 启动MQTT客户端:使用client.loop_start()方法启动MQTT客户端的事件循环,以便处理与代理之间的通信。例如: ```python client.loop_start() ``` 以上是paho-mqtt的基本配置步骤。你可以根据自己的需求进一步配置和使用paho-mqtt库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值