我想在Wildfly 11中使用嵌入式Apache Artemis接收MQTT消息。
现状:
我在Wildfly嵌入式Apache Artemis中添加了MQTT协议支持(添加了&#34;缺少&#34;文件夹和artemis-mqtt-protocol-.jar并在module.xml中启用了协议)< / p>
我正在使用完整的独立配置并为MTQQ添加了接受器:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:2.0"> <server name="default"> <remote-acceptor name="mqtt-acceptor" socket-binding="mqtt"> <param name="protocols" value="MQTT"/> </remote-acceptor>
主题为:
<jms-topic name="testEndpoint" entries="java:/jms/testEndpoint"/>
从日志中我可以看到它有效:
AMQ221020:在127.0.0.1:1883开始接受协议[MQTT]
AMQ221007:服务器现已上线AMQ221001:Apache ActiveMQ Artemis Message Broker版本1.5.5.jbossorg-008
AMQ221003:部署队列jms.queue.DLQ
WFLYMSGAMQ0002:将消息传递对象绑定到jndi名称 java:/ ConnectionFactory
AMQ221003:部署队列jms.queue.ExpiryQueue
WFLYMSGAMQ0002:将消息传递对象绑定到jndi名称 java:jboss / exported / jms / RemoteConnectionFactory
AMQ221052:部署主题jms.topic.testEndpoint
@MessageDriven(
activationConfig = { @ActivationConfigProperty(propertyName = "destination",
propertyValue = "testEndpoint"),
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Topic")
},
mappedName = "testEndpoint")
public class TestEndpoint implements MessageListener {
private static final Logger logger = Logger.getLogger(TestEndpoint.class.getName());
public void onMessage(Message message) {
try {
logger.debug("message: " + message.getClass().getName());
} catch (Exception e) {
logger.debug("exception: " + e.getMessage());
}
}
}
创建会话:63f14f85-0fa2-4fe7-a27b-03ef8e6639a2
无法找到address = testEndpoint的任何绑定 消息= SERVERMESSAGE [MESSAGEID = 962,耐用=真,用户ID = NULL,优先权= 0, bodySize = 512,timestamp = 0,expiration = 0,durable = true, 地址= testEndpoint,属性= TypedProperties [mqtt.message.retain =真,mqtt.qos.level = 1]] @ 749653273
信息 SERVERMESSAGE [MESSAGEID = 962,耐用=真,用户ID = NULL,优先权= 0, bodySize = 512,timestamp = 0,expiration = 0,durable = true, address = testEndpoint,properties = TypedProperties [mqtt.message.retain = true,mqtt.qos.level = 1]] @ 749653273不会去任何地方,因为它没有绑定 地址:testEndpoint
QueueImpl [名= $ sys.mqtt.retain.testEndpoint, 邮局= PostOfficeImpl [服务器= ActiveMQServerImpl :: serverUUID = c58c74d5-ea71-11e7-9621-a434d929f4aa]] @ 6ff93fb4 做交付。 messageReferences = 0
所以看起来我在某个地方缺少一些绑定,但我找不到它会是什么。有人有任何想法吗?
答案 0 :(得分:1)
日志说明了这一点:
AMQ221052:部署主题jms.topic.testEndpoint
它也说:
无法找到address = testEndpoint
的任何绑定
因此,在我看来,它是&#34; jms.topic.testEndpoint&#34;之间的简单不匹配。和&#34; testEndpoint&#34;。
答案 1 :(得分:0)
看起来有两个问题:
@MessageDriven(
mappedName = "testEndpoint", // GlassFish
activationConfig = {
@ActivationConfigProperty(propertyName = "destination",
propertyValue = "testEndpoint"), // Wildfly
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Topic")
})
&lt; jms-topic name =&#34; testEndpoint&#34; 条目=&#34; / JMS /主题/ testEndpoint&#34; /&GT;