标签: mqtt

在 MQTT 消息上运行进程

我想在收到 MQTT 数据包时在我的 RP 上启动一个任务(例如播放音频文件)。接近它的最佳方法是什么?我在考虑要么写c++脚本,要么写python。我对 Linux shell 不太熟悉,可能有更简单的方法来做到这一点。有什么建议么?

unix bash mqtt raspberry-pi

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

MQTT 代理可以处理多少个客户端?

MQTT 是一种发布/订阅协议。每当发布者发布到某个主题时,所有订阅该主题的订阅者都将通过 MQTT 代理获取消息。我想知道 MQTT 代理可以处理的最大客户端数量。有上限吗?

mqtt

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

消息代理之间有什么区别?

我对不同的消息代理感到困惑。

我的设备正在使用 MQTT。到目前为止,我已经研究过 HiveMQ、IBM Messagesight、RabbitMQ、google pub and sub、AWS SQS。

HiveMQ(MQTT消息代理)和RabbitMQ(或pub and sub,SQS)有什么区别?

除了协议和成本可能不同之外,它们的功能有什么区别吗?还有一个问题,IBM messagesight 是一种消息代理吗?它与 google pub and sub 或rabbit 有什么不同吗?

我找不到任何有关 messagesight 的信息。

message-queue rabbitmq mqtt hivemq google-cloud-platform

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

当 MQTTnet 服务器未运行时,PublishAsync 不会失败

我正在使用 MQTTNet,这是一个 .NET 库,用于基于以下链接的 MQTT 通信

https://github.com/chkr1011/MQTTnet

我正在使用managed MQTT Client下面的链接

https://github.com/chkr1011/MQTTnet/wiki/ManagedClient

我有以下代码来publish发送消息MQTT server

 var messagePayload = new MqttApplicationMessageBuilder()
                                      .WithTopic("Topic1")
                                      .WithPayload(message)
                                      .WithExactlyOnceQoS()
                                      .WithRetainFlag()
                                      .Build();

    try
    {
          await mqttClient.PublishAsync(messagePayload);                  
    }
    catch (Exception ex)
    {
         //Why I am not getting exception? 
    }
Run Code Online (Sandbox Code Playgroud)

c# mqtt

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

java.util.MissingResourceException - 定位日志记录类时出错(MQTT 库)

我正在编写一个使用 MQTT 的 Android 应用程序。

发布版本中,我收到一个异常:

MqttClient client = new MqttClient(host, clientId, new MemoryPersistence()); 
Run Code Online (Sandbox Code Playgroud)

调试构建上,一切正常。我正在使用mqtt-client-0.4.0.jar

执行(我在发布中得到的是):

W/System.err: java.util.MissingResourceException: Error locating the logging class
W/System.err:     at d.a.a.a.a.b.b.a(:2)
W/System.err:     at d.a.a.a.a.e.<init>(Unknown Source:7)
W/System.err:     at c.b.a.j.a(:2)
W/System.err:     at c.b.a.j.<init>(Unknown Source:14)
W/System.err:     at c.b.a.d.onStarted(:1)
W/System.err:     at android.location.LocationManager$GnssStatusListenerTransport$GnssHandler.handleMessage(LocationManager.java:1424)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:106)
W/System.err:     at android.os.Looper.loop(Looper.java:164)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6626)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
Run Code Online (Sandbox Code Playgroud)

我查看了 mqtt 库,发现了生成此错误的源代码:

https://github.com/eclipse/paho.mqtt.java/blob/master/org.eclipse.paho.client.mqttv3/src/main/java/org/eclipse/paho/client/mqttv3/logging/LoggerFactory。爪哇

第 76 行:

    public static Logger getLogger(String messageCatalogName, …
Run Code Online (Sandbox Code Playgroud)

java android mqtt

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

如何使 TLS 通过端口 8883 在 MQTT 中工作?

我需要帮助来配置此 MQTT 以在TLS模式下工作。我已经在服务器中设置了 MQTT。服务器受LetsEncrypt证书保护,这就是它的域中有https 的原因,然后我也在远程计算机中设置它。

服务器运行此命令

mosquitto_sub -h localhost -t 'testtopic' -p 1883
Run Code Online (Sandbox Code Playgroud)

远程计算机运行此命令

mosquitto_pub -h domainName -t 'testtopic' -m "test message" -p 1883
Run Code Online (Sandbox Code Playgroud)

两台电脑上的MQTT配置是这样的

pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
port 1883
persistence_file mosquitto.db
log_dest syslog
log_dest stdout
log_dest topic
log_type error
log_type warning
log_type notice
log_type information
connection_messages true
log_timestamp true
allow_anonymous true
tls_version tlsv1.2
Run Code Online (Sandbox Code Playgroud)

这个有效。但如何让通讯变成TLS模式呢?有人可以让我知道什么是正确的配置吗?如何在两台计算机中传递参数?

  • 我尝试将配置的端口更改为8883
  • 在两台计算机中,我都尝试传递 --cafile 其中 cafile 是一个.pem 证书,该证书来自LetsEncrypt生成 …

ssl mqtt mosquitto

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

MqttAsyncClient 客户端未连接 (32104)

我正在 Java 中使用 MqttAsyncClient。以下代码只是我使用它的一部分,当我尝试订阅任何主题时出现错误时,问题就出现了:

客户端未连接 (32104)

    private int connections;
    private String topic;

    private MqttAsyncClient client;
    private MqttConnectOptions connOpts;
    private MemoryPersistence persistence;

private void configureMqtt() 
    {
        try 
        {
            logger.info("Starting the Mqtt Configuration...");

            client = new MqttAsyncClient(conf.getServerURI(), conf.getClientID(), persistence);
            connOpts = new MqttConnectOptions();

            connOpts.setCleanSession(true);
            connOpts.setUserName(conf.getUserName());
            connOpts.setPassword(conf.getPassword().toCharArray());
            connOpts.setAutomaticReconnect(true);

            logger.info("The Mqtt protocol has been configured successfully!!!");
        } 
        catch (Exception e) 
        {
            logger.error("An error has happened during Mqtt configuration");
            logger.error(e);
        }
    }

public void startSub()
{
    try
    {
        logger.info("Conecting to: " + conf.getServerURI() + " …
Run Code Online (Sandbox Code Playgroud)

java mqtt

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

React Native MQTT.js 不适用于 Android 9+

我正在使用React Native 0.61 (CLI)构建 Android 应用程序,并在此处使用常见的 MQTT.js 包:https://www.npmjs.com/package/mqtt (v.3.0.0)

这是我的build.gradle

buildToolsVersion = "28.0.3"
minSdkVersion = 25
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
Run Code Online (Sandbox Code Playgroud)

我使用WebSocket协议连接到我自己的 mqtt 代理。

在调试模式下,一切在任何手机上都能完美运行。但奇怪的是,当我通过命令(gradlew assembleRelease(签名))发布 APK 时,它无法连接到 Android 9+ 上的代理(均为模拟器)(Android 8 运行良好)

编译为本机代码时似乎出现了问题。

android mqtt android-gradle-plugin react-native

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

如何使用 Fluent Assertions 抛出异常?

我正在使用客户端与CloudMQTT API交互。我正在尝试创建一个用户,但在尝试下面提供的代码后,我无法创建用户。当使用该项目的 Github 存储库中提供的代码时,我注意到我无法使用方法ShouldThrow()(显然它应该由Fluent Assertions提供)。

我确实在 StackOverflow 上找到了一篇文章,它看起来与我遇到的问题非常相似。问题中提到 FluentAssertions 不支持异步方法。然而,在客户端的示例代码中,我可以看到无论ShouldThrow()这一事实如何,都使用了该方法。

我怎样才能让它ShoudldThrow()工作,或者我什至需要它工作(因为我认为只有在应用单元测试时才应该在这段代码中需要它)?

这是迄今为止尝试过的:

public static async void CreateCloudUser(ICloudMqttApi client)
{
    var users = await client.GetUsers();
    Console.WriteLine($"Creating a user. Current users available: {users.Count}");
    var expectedUser = new NewUser
    {
        Password = $"{Guid.NewGuid()}",
        Username = $"staging-{Guid.NewGuid()}",
    };

    var createUserResponse = await client.CreateUser(expectedUser);
    createUserResponse.IsSuccessStatusCode.Should().BeTrue();

    var actual = await client.GetUser(expectedUser.Username);
    actual.Should().NotBeNull();
    actual.Username.Should().Be(expectedUser.Username);

    //users.Should().Contain(u => u.Username == expectedUser.Username); // <-- This …
Run Code Online (Sandbox Code Playgroud)

c# mqtt fluent-assertions

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

基于事件的微服务:带有代理的 MQTT 或带有 API 网关的 HTTP?

我正在尝试开发一个带有微服务的项目。

我对这个主题有一些疑问(有些不清楚):

1)如何实现微服务通信?

A) HTTP:每个微服务都会公开 HTTP API,即 API 网关广播请求。

B) MQTT:每个微服务发布/订阅到代理

C) 两者:但是如何理解一个比另一个更好呢?

即使对于通常通过 HTTP 执行的经典操作,我是否也必须使用 pub/sub 协议作为标准?例如我有两个微服务: 网络管理Product-service网络管理是一个面板,允许管理员在其电子商务数字商店中添加、修改...产品。假设我们要实现 createProduct 操作。它是一个命令(根据事件/命令区分),是一对一的通信。

我可以在产品服务中打开一个 API,比如说(POST,“/product”)来添加新产品。我还可以在ProductCreationRequest事件中实现此转换命令。在这种情况下:web-managemnet发布此事件。产品服务监听productCreationRequest事件(以及productUpdateRequest、productGetEvents等),一旦收到通知,它就会执行操作并发出productCreated事件。

我觉得这个案子很边缘化。例如,最后一次服务可以侦听ProductCreated并立即向客户发送消息(电子邮件或推送通知)。您对这个用例有何看法?

2)哪个可能是有效的代理(我将使用 docker-compose 或 kubernetes 来编排容器化微服务:采用的语言可能是 java、javascript、python)?

rest publish-subscribe broker mqtt

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