标签: mosca

通过Web套接字使用来自浏览器的HTTPS连接mqtt客户端

我想使用带有HTTPS的Web套接字在Web浏览器上运行mqtt客户端.使用HTTP,我没有问题.以下是使用HTTP时Web浏览器上的代码.

<script>
      var client  = mqtt.connect( 'wss://127.0.0.1:3000', {username:'test_user', password:'test_password'} );
      client.subscribe("mqtt/test");

      client.on("message", function(topic, payload) {
        alert([topic, payload].join(": "));
        client.end();
      });

      client.publish("mqtt/test", "testing hello world!");
</script> 
Run Code Online (Sandbox Code Playgroud)

这就是我启动独立的mosca代理以在websockets上使用HTTPS的方法.

mosca --very-verbose --key ./tls-key.pem --cert ./tls-cert.pem --credentials ./credentials.json --https-port 3000 --https-bundle --https-static ./ | pino
Run Code Online (Sandbox Code Playgroud)

我应该如何在浏览器上更改我的mqtt客户端代码以通过HTTPS连接到websockets上的Mosca代理?

https websocket node.js mqtt mosca

7
推荐指数
1
解决办法
1120
查看次数

Node js mosca 代理错误:预期“schema”是对象或布尔值

我创建了一个简单的经纪人:

var mosca = require("mosca");
var settings = {
  port: 1883,
};

var server = new mosca.Server(settings);

server.on("ready", function () {
  console.log("ready");
});
Run Code Online (Sandbox Code Playgroud)

当我运行文件时出现此错误:

/home//Documents/mqtt/node_modules/jsonschema/lib/validator.js:107
    throw new SchemaError('Expected `schema` to be an object or boolean');
    ^
SchemaError: Expected `schema` to be an object or boolean
    at Validator.validate (/home//Documents/mqtt/node_modules/jsonschema/lib/validator.js:107:11)
    at Object.validate (/home//Documents/mqtt/node_modules/mosca/lib/options.js:264:26)
    at new Server (/home//Documents/mqtt/node_modules/mosca/lib/server.js:104:34)
    at Object.<anonymous> (/home//Documents/mqtt/broker.js:16:14)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47 {
  schema: undefined …
Run Code Online (Sandbox Code Playgroud)

node.js mqtt mosca

6
推荐指数
2
解决办法
9822
查看次数

类型错误:客户端不是构造函数 - 最新版本的 kafka-node 错误

Mosca 给出了这个错误:

TypeError: Client is not a constructor
    at new KafkaAscoltatore (/home/x/Desktop/broker/node_modules/mosca/node_modules/ascoltatori/lib/kafka_ascoltatore.js:59:26)
    at Object.build (/home/x/Desktop/broker/node_modules/mosca/node_modules/ascoltatori/lib/ascoltatori.js:77:12)
    at /home/x/Desktop/broker/node_modules/mosca/lib/server.js:181:40
    at makeCall (/home/x/Desktop/broker/node_modules/fastseries/series.js:117:7)
    at ResultsHolder.release (/home/x/Desktop/broker/node_modules/fastseries/series.js:96:9)
    at series (/home/x/Desktop/broker/node_modules/fastseries/series.js:39:14)
    at Object.series (/home/x/Desktop/broker/node_modules/steed/steed.js:90:7)
    at new Server (/home/x/Desktop/broker/node_modules/mosca/lib/server.js:171:9)
    at Object.<anonymous> (/home/x/Desktop/broker/broker.js:118:14)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:266:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3)
Run Code Online (Sandbox Code Playgroud)

环境

  • 节点版本:v10.9.0
  • Kafka节点版本:最新
  • Mosca 版本:最新

我试过的

我打开/home/x/Desktop/broker/node_modules/mosca/node_modules/ascoltatori/lib/kafka_ascoltatore.js 并查看下面的行后发现问题与 kafka-node 版本有关:

this._opts.kafka = this._opts.kafka || require("kafka-node");
Run Code Online (Sandbox Code Playgroud)

当我删除时this._opts.kafka,它开始正常工作。然后我打印了两个我发现新版本中没有 Client …

node.js apache-kafka mosca

5
推荐指数
1
解决办法
3273
查看次数

node.js使用TLS的mqtt客户端

我正在尝试使用下面的包实现一个带有TLS的node.js mqtt客户端;

https://www.npmjs.com/package/mqtt#client

没有TLS运行mqtt客户端的代码如下:

var mqtt = require('mqtt')
var client  = mqtt.connect('mqtt://test.mosquitto.org')

client.on('connect', function () {
  client.subscribe('presence')
  client.publish('presence', 'Hello mqtt')
})

client.on('message', function (topic, message) {
  // message is Buffer 
  console.log(message.toString())
  client.end()
})
Run Code Online (Sandbox Code Playgroud)

如何修改上述代码以在mqtt客户端上使用TLS?

使用以下命令,mosca MQTT代理作为独立运行;

mosca --key ./tls-key.pem --cert ./tls-cert.pem --http-port 3000 --http-bundle --http-static ./ | pino
Run Code Online (Sandbox Code Playgroud)

ssl node.js mqtt tls1.2 mosca

4
推荐指数
2
解决办法
6352
查看次数

Mosquitto vs Mosca水平可扩展性和弹性?

我计划使用Mosca或Mosquitto代理(因为它们是开源代码),以实现具有消息队列复制的可扩展体系结构,以避免在代理最终失败时丢失代理尚未提供的消息.
正如我所读到的,mosquitto是一种成熟且非常稳定的解决方案,具有使用桥接器的水平可扩展性.但我找不到任何插件将消息写入数据库(所有代理通用),所以我认为这是一个限制,因为如果我们有两个代理负载平衡,其中一个死,然后所有的消息在经纪人恢复之前,经纪人无法交付.另一方面,Mosca允许我们使用Redis进行扩展,如果代理1死亡,那么broker2仍然可以传递消息,因为它们存储在公共数据库中.通过这种方式,我可以使用redis的主从配置来避免单点故障.

所以我的问题是:

1)mosca是生产的好选择吗?

2)是否可以使用redis分配带mosquitto的消息队列?

mqtt mosquitto mosca

2
推荐指数
1
解决办法
2233
查看次数

标签 统计

mosca ×5

mqtt ×4

node.js ×4

apache-kafka ×1

https ×1

mosquitto ×1

ssl ×1

tls1.2 ×1

websocket ×1