我想在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”之间的简单不匹配。

07-28 13:19