springboot发送mqtt

牛逼话不多,直接上代码

接收

import com.chunxiao.dao.AlrmLogMapper;
import com.chunxiao.dao.DevicePointDataLogMapper;
import com.chunxiao.dao.EquipmentLevelTopicMapper;
import com.chunxiao.domain.AlrmLog;
import com.chunxiao.domain.DevicePointDataLog;
import com.chunxiao.domain.EquipmentLevelTopic;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
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.support.DefaultPahoMessageConverter;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
import org.springframework.messaging.MessagingException;

/**
 * @since 1.0.0
 */
@Configuration
@IntegrationComponentScan
public class MqttReceiveConfig {

    @Autowired   //自己的Mapper不要误会
    private DevicePointDataLogMapper devicePointDataLogMapper;
    @Autowired    //自己的Mapper不要误会
    private EquipmentLevelTopicMapper equipmentLevelTopicMapper;
    @Autowired     //自己的Mapper不要误会
    private AlrmLogMapper alrmLogMapper;

    @Value("${spring.mqtt.username}")
    private String username;

    @Value("${spring.mqtt.password}")
    private String password;

//    @Value("${spring.mqtt.url}")
//    private String hostUrl;

    @Value("${spring.mqtt.client.id}")
    private String clientId;

    @Value("${spring.mqtt.default.topic}")
    private String defaultTopic;

    @Value("${spring.mqtt.completionTimeout}")
    private int completionTimeout;   //连接超时


    @Bean
    public MqttConnectOptions getMqttConnectOptions() {
        MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
        mqttConnectOptions.setUserName(username);
        mqttConnectOptions.setPassword(password.toCharArray());
        mqttConnectOptions.setServerURIs(new String[]{"tcp://59.111.56.184:1883"});
        mqttConnectOptions.setKeepAliveInterval(2);
        return mqttConnectOptions;
    }

    @Bean
    public MqttPahoClientFactory mqttClientFactory() {
        DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
        factory.setConnectionOptions(getMqttConnectOptions());
        return factory;
    }

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

    //配置client,监听的topic
    @Bean
    public MessageProducer inbound() {
        //从本地数据库查询所有的topic
        String[] strings = equipmentLevelTopicMapper.fandAll();
        StringBuffer str = new StringBuffer();
        String strs = null;
        for (int i = 0; i < strings.length; i++) {
            strs = str.append(strings[i] + ",").toString();
        }
        String topic = strs.substring(0, strs.length() - 1);
        MqttPahoMessageDrivenChannelAdapter adapter =
                new MqttPahoMessageDrivenChannelAdapter(clientId + "_inbound", mqttClientFactory(),
                        //此为设置topic,可以为多个
                        topic);
        adapter.setCompletionTimeout(completionTimeout);
        adapter.setConverter(new DefaultPahoMessageConverter());
        adapter.setQos(1);
        adapter.setOutputChannel(mqttInputChannel());
        return adapter;
    }

    //通过通道获取数据
    @Bean
    @ServiceActivator(inputChannel = "mqttInputChannel")
    public MessageHandler handler() {
        return new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                //获取发送消息的topic
                String topic = message.getHeaders().get("mqtt_receivedTopic").toString();
                String type = topic.substring(topic.lastIndexOf("/") + 1, topic.length());
//                持久化到数据库
                EquipmentLevelTopic equipmentLevelTopic = equipmentLevelTopicMapper.selectAll(topic);
                DevicePointDataLog devicePointDataLog = new DevicePointDataLog();
                devicePointDataLog.setEquipmentId(equipmentLevelTopic.getEquipmentId());
                devicePointDataLog.setEquipmentLevelTypeId(equipmentLevelTopic.getEquipmentLevelTypeId());
                devicePointDataLog.setPointValues(message.getPayload().toString());
                devicePointDataLogMapper.insertSelective(devicePointDataLog);
            }
        };
    }

    //通道2
    @Bean
    public MessageChannel mqttInputChannelTwo() {
        return new DirectChannel();
    }

    //配置client2,监听的topic:hell2,hello3
    @Bean
    public MessageProducer inbound1() {
        String[] strings = equipmentLevelTopicMapper.fandAllAblam();
        StringBuffer str = new StringBuffer();
        String strs = null;
        for (int i = 0; i < strings.length; i++) {
            strs = str.append(strings[i] + ",").toString();
        }
        String topic = strs.substring(0, strs.length() - 1);
        MqttPahoMessageDrivenChannelAdapter adapter =
                new MqttPahoMessageDrivenChannelAdapter(clientId + "_inboundTwo", mqttClientFactory(),
                        topic);
        adapter.setCompletionTimeout(completionTimeout);
        adapter.setConverter(new DefaultPahoMessageConverter());
        adapter.setQos(1);
        adapter.setOutputChannel(mqttInputChannelTwo());
        return adapter;
    }

    //通过通道2获取数据
    @Bean
    @ServiceActivator(inputChannel = "mqttInputChannelTwo")
    public MessageHandler handlerTwo() {
        return new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                //获取发送消息的topic
                String topic = message.getHeaders().get("mqtt_receivedTopic").toString();
                String type = topic.substring(topic.lastIndexOf("/") + 1, topic.length());
//                持久化到数据库
                EquipmentLevelTopic equipmentLevelTopic = equipmentLevelTopicMapper.selectAll(topic);
                AlrmLog alrmLog = new AlrmLog();
                alrmLog.setEquipmentId(equipmentLevelTopic.getEquipmentId());
                alrmLog.setEquipmentLevelTypeId(equipmentLevelTopic.getEquipmentLevelTypeId() + "");
                alrmLog.setAlrmValue(message.getPayload().toString());
                alrmLogMapper.insertSelective(alrmLog);
            }
        };
    }

}

里边的代码格式我有所改动,耐下心看,寻找适合你自己的

发送

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

/**
 * @data 2019/4/4 0004 -下午 4:39
 */
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway {
    void sendToMqtt(String data,@Header(MqttHeaders.TOPIC) String topic);
}

import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;

/**
 * 〈一句话功能简述〉<br>
 * 〈MQTT发送消息配置〉
 *
 * @author AnswerChang
 * @create 2018/6/4
 * @since 1.0.0
 */
@Configuration
@IntegrationComponentScan
public class MqttSenderConfig {

    @Value("${spring.mqtt.username}")
    private String username;

    @Value("${spring.mqtt.password}")
    private String password;

    @Value("${spring.mqtt.url}")
    private String hostUrl;

    @Value("${spring.mqtt.client.id}")
    private String clientId;

    @Value("${spring.mqtt.default.topic}")
    private String defaultTopic;

    @Bean
    public MqttConnectOptions getMqttConnectOptions(){
        MqttConnectOptions mqttConnectOptions=new MqttConnectOptions();
        mqttConnectOptions.setUserName(username);
        mqttConnectOptions.setPassword(password.toCharArray());
        mqttConnectOptions.setServerURIs(new String[]{hostUrl});
        mqttConnectOptions.setKeepAliveInterval(2);
        return mqttConnectOptions;
    }
    @Bean
    public MqttPahoClientFactory mqttClientFactory() {
        DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
        factory.setConnectionOptions(getMqttConnectOptions());
        return factory;
    }
    @Bean
    @ServiceActivator(inputChannel = "mqttOutboundChannel")
    public MessageHandler mqttOutbound() {
        MqttPahoMessageHandler messageHandler =  new MqttPahoMessageHandler(clientId, mqttClientFactory());
        messageHandler.setAsync(true);
        messageHandler.setDefaultTopic(defaultTopic);
        return messageHandler;
    }
    @Bean
    public MessageChannel mqttOutboundChannel() {
        return new DirectChannel();
    }
}

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**

  • @author changwensong

  • @data 2019/4/4 0004 -下午 4:39
    */
    @RestController
    @RequestMapping("/test")
    public class TestController {

    @Autowired
    private MqttGateway mqttGateway;

    @PostMapping("/sendMqtt")
    public String sendMqtt(@RequestParam(“sendData”) String sendData){
    mqttGateway.sendToMqtt(sendData,“hello”);
    return “OK”;
    }
    }

结束

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小可乐-我一直在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值