MQTT消息环境搭建

1..下载安装包

http://mosquitto.org/download/    以版本1.5为例,下载mosquitto-1.5.tar.gz

2.下载依赖环境

yum -y install gcc gcc-c++ openssl-devel c-ares-devel  wget cmake

yum install -y c-ares-devel e2fsprogs-devel uuid-devel libuuid-devel

3.解压mosquitto-1.5进入目录编译与安装

make && make install

4.修改配置文件

    设置用户为root

MQTT消息环境搭建_第1张图片

  允许匿名

MQTT消息环境搭建_第2张图片

  设置服务端口与监听消息端口

MQTT消息环境搭建_第3张图片

5.把新共享库目录加入到共享库配置文件中

   cat /etc/ld.so.conf

   echo  "/usr/local/lib" >> /etc/ld.so.conf

   ldconfig

MQTT消息环境搭建_第4张图片

6.启动服务

  mosquitto -c /etc/mosquitto/mosquitto.conf -d                       (-d表示后台启动)

MQTT消息环境搭建_第5张图片

7.启动消费者例子

  mosquitto_sub -t rulee

8.发送消息

  mosquitto_pub -h localhost -p 9090 -t rulee -m "hello rule engine"        (-h 服务器地址  -p监听端口)

9.检查消费者中是否有显示"hello rule engine"

 

MQTT的java api

 

pom


    org.eclipse.paho
    org.eclipse.paho.client.mqttv3
    1.2.0

 

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

public class MQTTUtil {

    private static MqttClient client;   //Mqtt客户端
    private static int qos = 1;         //数据服务质量

    /**
     * 初始化连接
     *
     * @param broker   mqtt节点
     * @param userName 用户名
     * @param password 密码
     * @param clientId 客户端id
     * @throws MqttException
     */
    public static void initMqttClient(String broker, String userName, String password, String clientId) throws MqttException {
        MemoryPersistence persistence = new MemoryPersistence();// 内存存储
        client = new MqttClient(broker, clientId, persistence);// 创建客户端
        MqttConnectOptions connOpts = new MqttConnectOptions();// 创建链接参数
        connOpts.setCleanSession(false);    // 在重新启动和重新连接时记住状态
        connOpts.setUserName(userName);     // 设置连接的用户名
        connOpts.setPassword(password.toCharArray());
        connOpts.setConnectionTimeout(10);  // 设置超时时间 单位为秒
        connOpts.setKeepAliveInterval(20);  // 设置会话心跳时间,客户端发送个消息判断客户端是否在线,没有重连的机制
        client.connect(connOpts);     // 建立连接
    }

    /**
     * 传入消息
     *
     * @param topic   主题
     * @param message 消息
     * @throws MqttException
     */
    public static void setMessage(String topic, String message) throws MqttException {
        MqttMessage data = new MqttMessage(message.getBytes());// 创建消息
        data.setQos(qos); // 设置消息的服务质量
        client.publish(topic, data);// 发布消息
    }

    /**
     * 消费的数据处理方式
     */
    public static void setCallback() {
        client.setCallback(new MqttCallback() {
            public void connectionLost(Throwable cause) {
                System.out.println("断开连接");
            }

            public void messageArrived(String topic, MqttMessage message) throws Exception {
                //"topic:"  topic,"Qos:" + message.getQos()
                System.out.println("接收" + new String(message.getPayload()));//消息
            }

            public void deliveryComplete(IMqttDeliveryToken token) {
                //token.isComplete()
                System.out.println("完成");
            }
        });
    }

    /**
     * @param topic
     * @throws MqttException
     */
    public static void getMessage(String topic) throws MqttException {
        client.subscribe(topic, qos);//订阅消息
    }

    public static void close() throws MqttException {
        client.disconnect();// 断开连接
        client.close();// 关闭客户端
    }

    /**
     * 异常信息打印
     *
     * @param me
     */
    public static void error(MqttException me) {
        System.out.println("reason " + me.getReasonCode());
        System.out.println("msg " + me.getMessage());
        System.out.println("loc " + me.getLocalizedMessage());
        System.out.println("cause " + me.getCause());
        System.out.println("excep " + me);
        me.printStackTrace();
    }

    /**
     * 测试类
     * @param args
     */
    public static void main(String[] args) {
        try {
            initMqttClient("tcp://yc3:1883", "test", "test", "pubClient");////初始化客户端
            setCallback();//设置回调函数
            getMessage("rulee");//订阅
            for (int i = 0; i < 10; i++) {//发布
                setMessage("rulee", "12312312");
            }
            close();
        } catch (MqttException e) {
            error(e);
        }
    }
}

 

 

 

 

 

 

 

你可能感兴趣的:(java后端,消息队列)