使用Wildlfy 11嵌入式Apache Artemis接收MQTT消息



我想在Wildfly 11中接收带有嵌入式Apache Artemis的MQTT消息。

当前状态:

  1. 我将MQTT协议支持添加到wildfly嵌入的Apache Artemis(添加了"缺失"文件夹和Artemis-Mqtt-protocol-.jar,并在模块中启用了该协议。xml)

  2. 我正在使用完整的独立配置,并为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"/>
  1. 还将MQTT添加到插座绑定

从日志中我可以看到它有效:

AMQ221020:在协议[MQTT]

的127.0.0.1:1883启动受体

AMQ221007:服务器现在为实时AMQ221001:Apache Activemq Artemis 消息经纪1.5.5.5.jbossorg-008

AMQ221003:部署队列JMS.Queue.dlq

wflymsgamq0002:绑定的消息对象到jndi名称 java:/connection -factory

AMQ221003:部署队列

wflymsgamq0002:绑定的消息对象到jndi名称 Java:JBOSS/导出/JMS/remoteConnectionFactory

amq221052:部署主题jms.topic.testendpoint

  1. 接下来我写了一个简单的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());
            }
        }
    }
  1. 我可以连接到端口1883上的服务器,当我向TENTENDPOINT发送消息时,我可以在日志中看到:

创建的会话:63F14F85-0FA2-4FE7-A27B-03EF8E6639A2

找不到地址的任何绑定= testendpoint messages = serverMessage [messageId = 962,durable = true,userId = null,Priority = 0, 身体= 512,时间戳= 0,到期= 0,耐用= true, 地址= testendpoint,properties = typedproperties [mqtt.message.train = true,mqtt.qos.level = 1]]@749653273

消息 serverMessage [messageId = 962,耐用= true,userId = null,Priority = 0, 身体= 512,时间戳= 0,到期= 0,耐用= true, 地址= testendpoint,properties = typedProperties [mqtt.message.train = true,mqtt.qos.level = 1]]@749653273无处不在 地址:TESTENDPOINT

queueimpl [name = $ sys.mqtt.retain.testendpoint, 邮局=邮局 [server = activemqserverimpl :: serveruuid = c58c74d5-ea71-11e7-9621-a434d929f4aa]]@6ff93fb4 交付。MessagereFerences = 0

所以我看来我在某个地方缺少一些绑定,但我找不到它会是什么。有人有任何想法吗?

日志说:

amq221052:部署主题jms.topic.testendpoint

也说了这一点:

找不到任何绑定= testendpoint

所以在我看来,这是" jms.topic.testendpoint"one_answers" testendpoint"之间的简单不匹配。

看起来有两个问题:

  1. 在MessagedRiven注释中,MappedName使用glassfish和activationConfigproperty(propertyName =" destinate =" destination")由Wildfly。根据帖子,我发现两者都很好。因此,正确的格式为:

    @MessageDriven(                
        mappedName = "testEndpoint", // GlassFish    
        activationConfig = { 
            @ActivationConfigProperty(propertyName = "destination", 
                                      propertyValue = "testEndpoint"),  // Wildfly
            @ActivationConfigProperty(propertyName = "destinationType",                                                      
                                      propertyValue = "javax.jms.Topic")
    })
  1. 在Wildfly配置中,一个主题的名称应与整个IE相对应:

&lt; jms-topic名称='testendpoint&quot&quot&quot 条目=&quot; jms/topic/testendpoint&quort&quord&gt;

相关内容

  • 没有找到相关文章

最新更新