我想在Wildfly 11中使用嵌入式Apache Artemis接收MQTT消息。
当前状态:
我向Wildfly嵌入式Apache Artemis添加了MQTT协议支持(添加了“ missing”文件夹和artemis-mqtt-protocol-.jar,并在module.xml中启用了该协议)
我正在使用完整的独立配置并为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"/>
还向套接字绑定添加了mqtt
从日志中,我可以看到它有效:
AMQ221020:协议[MQTT]的接受器始于127.0.0.1:1883
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
接下来,我编写了一个简单的MDB:
@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());
}
}
}
我可以在端口1883上连接到服务器,当我向testEndpoint发送消息时,可以在日志中看到:
会议创建:63f14f85-0fa2-4fe7-a27b-03ef8e6639a2
在上找不到address = testEndpoint的任何绑定
message = ServerMessage [messageID = 962,durable = true,userID = null,priority = 0,
bodySize = 512,时间戳= 0,到期时间= 0,耐用= true,
地址= testEndpoint,属性= TypedProperties [mqtt.message.retain = true,mqtt.qos.level = 1]] @ 749653273
信息
ServerMessage [messageID = 962,durable = true,userID = null,priority = 0,
bodySize = 512,时间戳= 0,到期时间= 0,耐用= true,
address = testEndpoint,properties = TypedProperties [mqtt.message.retain = true,mqtt.qos.level = 1]] @ 749653273没有任何作用,因为它没有绑定
地址:testEndpoint
QueueImpl [name = $ sys.mqtt.retain.testEndpoint,
postOffice = PostOfficeImpl
[server = ActiveMQServerImpl :: serverUUID = c58c74d5-ea71-11e7-9621-a434d929f4aa]] @ 6ff93fb4
做交付。 messageReferences = 0
所以看起来我在某处缺少某些绑定,但是我找不到它的样子。有人知道吗?
最佳答案
日志说:
AMQ221052:部署主题jms.topic.testEndpoint
它还说:
找不到地址= testEndpoint的任何绑定
因此在我看来,这只是“ jms.topic.testEndpoint”和“ testEndpoint”之间的简单不匹配。