mosquitto用户密码配置,导入数据到mongoDB

将经过broker的所有消息入库

mosquitto的配置

1、用户密码的创建 (可参看http://blog.csdn.net/smellmine/article/details/51216450
①、创建用户名和密码,在doc下用命令mosquitto_passwd -c pwfile.example userName,其中userName就是要创建的用户名,之后输入两边密码
②、在目录下的pwfile.example里面就有用户名和密码,密码是加密过的。
③、在发布/订阅之前的连接需要携带用户名和密码才可以让broker起到转发作用。


2、修改mosquitto端口
①、默认情况下,mosquitto使用的是1883端口
②、在.conf文件找到port,改成自己需要的端口号。我改成了1884,不能使用已占用的端口。


3、在Windows下还需要将添加的用户名和密码(还有权限)告诉broker
①、pwfile.example 是配置用户名和密码的文件
alfile.example 是配置用户控制权限的文件
这里写图片描述

②、知道了这些文件的用途之后,我们就可以开始在.conf中进行配置:
allow_anonymous (true|false) —看需求 根据参数组合表改动
password_file 路径/pwfile.example
acl_file 路径/aclfile.example
③、在doc下通过mosquitto -c mosquitto.conf 配置并启动mosquitto

代码实现接收经过broker的消息

*使用通配符(#/+)去订阅所有的主题

private static String URL = "192.168.1.166";
    private static String port = "1884";
    private static String userName="";
    private static String pwd = "";

    //public static final String BROKER_URL = "tcp://q.emqtt.com:1883";
    public static final String BROKER_URL = "tcp://"+URL+":"+port;
    public static final String TOPIC = "#";
    private MqttClient serverClient;
    private String clientITd;
    private MqttClient mqttClient;
    private void subscribe() {
        try {
            //mqttClient = new MqttClient(BROKER_URL, clientITd, new MemoryPersistence());
            mqttClient = new MqttClient(BROKER_URL, "LD-client", new MemoryPersistence());
            MqttConnectOptions conOptions = new MqttConnectOptions();
            conOptions.setCleanSession(false); //清除的标志
            conOptions.setUserName(userName); //用户名,密码
            conOptions.setPassword(pwd.toCharArray());
            mqttClient.setCallback(new MqttCallback() {
                @Override
                public void connectionLost(Throwable throwable) {
                }

                @Override
                public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {

                    String message = new String(mqttMessage.getPayload(), "GBK");
                    MyLog.showLog("收到的字节:" + Arrays.toString(mqttMessage.getPayload()) + "s:" + s);
                    MyLog.showLog("客户端id::" + mqttMessage.getId());

                    MyLog.showLog("收到消息内容::" + message);
                    MyLog.showLog("收到消息级别::" + mqttMessage.getQos());
                    MyLog.showLog("收到消息是否重复::" + mqttMessage.isDuplicate());
                    Message msg = handler.obtainMessage();
                    msg.obj = message;
                    handler.sendMessage(msg);
                }

                @Override
                public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
                    MyLog.showLog("发送完成");
                }
            });
            mqttClient.connect(conOptions);

            mqttClient.subscribe(TOPIC, 2);
            MyLog.showLog("订阅成功");
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }

将数据写入数据库

1.需要导入一个mongo-java-driver-xxx.jar 的包//xxx是版本

    Mongo m = new Mongo(URL, 27017); //27017是mongoDB的端口号
        // 选择数据库,如果没有这个数据库的话,会自动建立
    DB db = m.getDB("broker");
    // 建立一个集合,和数据库一样,如果没有,会自动建立
    DBCollection collection = db.getCollection("myCollectionTest");
    BasicDBObject doc = new BasicDBObject();
    doc.put("topic", s); //s是主题
    doc.put("message", message);//message是传过来的消息
    doc.put("count", 1);
    collection.insert(doc);
    System.out.println("信息已入库");
                    //BasicDBObject info = new BasicDBObject();
                    //info.put("x", 203);
                    //info.put("y", 102);
                    //doc.put("info", info);
                    // 插入一条数据,数据如下
                    // {
                    // "name" : "MongoDB",
                    // "type" : "database",
                    // "count" : 1,
                    // "info" : {
                    // x : 203,
                    // y : 102
                    // }
                    // }
                    // 可以循环插入多条数据
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值