java mqtt 订阅和发布

发布:


@Component
@Slf4j
public class MqttProducer {

    private MessageHandler messageHandler;

    @Bean
    public MqttPahoClientFactory mqttClientFactory() {
        DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
        MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
        mqttConnectOptions.setServerURIs(new String[] {"tcp://tx.njqiteng.club:1883"});
        factory.setConnectionOptions(mqttConnectOptions);

        // factory.setUserName("username");
        // factory.setPassword("password");
        return factory;
    }

    @Bean
    public MessageHandler mqttOutbound() {
        MqttPahoMessageHandler messageHandler =
                new MqttPahoMessageHandler("mqttPub", mqttClientFactory());
        messageHandler.setAsync(true);
        this.messageHandler = messageHandler;
        return messageHandler;
    }

    public void sendMessage(String topic,String msg){
        Message<String> message = MessageBuilder.withPayload(msg).setHeader(MqttHeaders.TOPIC,topic).build();
        messageHandler.handleMessage(message);
    }


}

 

 

订阅

@Component
@Slf4j

public class MqttSubscribe {

    @Autowired
    QTEnergyMsgHandle qtEnergyMsgHandle;

    @Value("${mqtt.topicsend}")
    String mqttPlugRpt;

    @Value("${mqtt.url}")
    String mqttUrl;

    @Value("${mqtt.topicrecv}")
    String mqttPlugCtrl;


    @Bean
    public MessageChannel mqttInputChannel() {
        MessageChannel messageChannel  =  new DirectChannel();
        ((DirectChannel) messageChannel).subscribe(mqttInput());
        return  messageChannel;
    }


    //@Bean
    // @ServiceActivator(inputChannel = "mqttInputChannel")
    public MessageHandler mqttInput() {
        return new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                System.out.println(message.getPayload());
                qtEnergyMsgHandle.handleMqttMsg((String)message.getPayload());
            }
        };
    }
    @Bean
    public MessageProducer inbound() {
        MqttPahoMessageDrivenChannelAdapter adapter =
                new MqttPahoMessageDrivenChannelAdapter(mqttUrl, "mossub",mqttPlugCtrl);
        adapter.setCompletionTimeout(5000);
        adapter.setConverter(new DefaultPahoMessageConverter());
        adapter.setOutputChannel(mqttInputChannel());
        return adapter;
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java实现MQTT订阅功能的示例代码: ```java import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; public class MqttSubscriber { private static final String BROKER = "tcp://mqtt.eclipse.org:1883"; private static final String CLIENT_ID = "JavaMqttSubscriber"; private static final String TOPIC = "your_topic"; private static final int QOS = 1; public static void main(String[] args) { try { MqttClient mqttClient = new MqttClient(BROKER, CLIENT_ID, new MemoryPersistence()); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); mqttClient.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { System.out.println("Connection lost: " + cause.getMessage()); } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { System.out.println("Received message: " + new String(message.getPayload())); } @Override public void deliveryComplete(IMqttDeliveryToken token) { // Not used in subscriber } }); mqttClient.connect(connOpts); mqttClient.subscribe(TOPIC, QOS); System.out.println("Subscribed to topic: " + TOPIC); } catch (MqttException e) { e.printStackTrace(); } } } ``` 请注意,上述代码使用了Eclipse Paho MQTT客户端库。在代码中,我们创建了一个MqttClient对象,并设置了连接选项。然后,我们设置了一个MqttCallback来处理连接丢失、消息到达和传递完成事件。最后,我们连接到MQTT代理并订阅指定的主题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值