ActiveMQ 作为 MQTT 代理并在没有客户端的情况下直接从中读取消息
ActiveMQ as an MQTT broker and read message directly from it without the client
所以我像这样使用 ActiveMQ 作为 MQTT 代理:
TransportConnector mqtt = new TransportConnector();
mqtt.setName(mqttBrokerConfig.getBrokerName());
URI uri = new URI("mqtt://some ip");
mqtt.setUri(uri);
final BrokerService broker = new BrokerService();
broker.setUseJmx(false); // Disable JMX for secure purpose
broker.setPersistent(mqttBrokerConfig.getPersistence());
broker.setAdvisorySupport(mqttBrokerConfig.getAdvisorySupport());
if(mqttBrokerConfig.getEnableLogin()) {
SimpleAuthenticationPlugin authenticationPlugin = loadLogins();
broker.setPlugins(new BrokerPlugin[]{authenticationPlugin});
}
broker.setUseShutdownHook(true);
broker.addConnector(mqtt);
我需要从外部接受MQTT消息,从broker读取消息,发送给Kafka。
现在我在同一个 JVM 中创建了一个 MQTT 客户端,并通过 127.0.0.1 连接代理。通过内部网络仍然有一些开销,并且有时会丢失连接。
既然客户端和代理在同一个JVM中,有没有办法不通过网络直接读取MQTT消息?如果 ActiveMQ 不支持此类功能,是否有另一个支持它的 java MQTT 代理?
我相信 VM transport 就是您想要的。如果您的客户端使用 VM 传输,则应该消除通过正常网络连接产生的任何开销。
为了使用 VM 传输,您需要使用 ActiveMQ 附带的 OpenWire JMS 客户端。您的远程 MQTT 客户端可以将消息发送到嵌入式 ActiveMQ 代理,然后同一 VM 中的本地客户端可以接收这些消息。
其他协议客户端(例如 MQTT、AMQP、STOMP 等)将无法使用 VM 传输,因为它需要 ActiveMQ-specific 集成。
所以我像这样使用 ActiveMQ 作为 MQTT 代理:
TransportConnector mqtt = new TransportConnector();
mqtt.setName(mqttBrokerConfig.getBrokerName());
URI uri = new URI("mqtt://some ip");
mqtt.setUri(uri);
final BrokerService broker = new BrokerService();
broker.setUseJmx(false); // Disable JMX for secure purpose
broker.setPersistent(mqttBrokerConfig.getPersistence());
broker.setAdvisorySupport(mqttBrokerConfig.getAdvisorySupport());
if(mqttBrokerConfig.getEnableLogin()) {
SimpleAuthenticationPlugin authenticationPlugin = loadLogins();
broker.setPlugins(new BrokerPlugin[]{authenticationPlugin});
}
broker.setUseShutdownHook(true);
broker.addConnector(mqtt);
我需要从外部接受MQTT消息,从broker读取消息,发送给Kafka。 现在我在同一个 JVM 中创建了一个 MQTT 客户端,并通过 127.0.0.1 连接代理。通过内部网络仍然有一些开销,并且有时会丢失连接。
既然客户端和代理在同一个JVM中,有没有办法不通过网络直接读取MQTT消息?如果 ActiveMQ 不支持此类功能,是否有另一个支持它的 java MQTT 代理?
我相信 VM transport 就是您想要的。如果您的客户端使用 VM 传输,则应该消除通过正常网络连接产生的任何开销。
为了使用 VM 传输,您需要使用 ActiveMQ 附带的 OpenWire JMS 客户端。您的远程 MQTT 客户端可以将消息发送到嵌入式 ActiveMQ 代理,然后同一 VM 中的本地客户端可以接收这些消息。
其他协议客户端(例如 MQTT、AMQP、STOMP 等)将无法使用 VM 传输,因为它需要 ActiveMQ-specific 集成。