Бих искал да получавам MQTT съобщения в Wildfly 11 с вградения Apache Artemis.
Сегашно състояние:
Добавих поддръжка на MQTT протокол към вградения в Wildfly Apache Artemis (добавих „липсващата“ папка и 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: Стартиран Acceptor на 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
- След това написах прост 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
Не можах да намеря никакви обвързвания за адрес=testEndpoint на message=ServerMessage[messageID=962,durable=true,userID=null,priority=0, bodySize=512, timestamp=0,expiration=0, durable=true, address=testEndpoint ,properties=TypedProperties[mqtt.message.retain=true,mqtt.qos.level=1]]@749653273
Message ServerMessage[messageID=962,durable=true,userID=null,priority=0, bodySize=512, timestamp=0,expiration=0, durable=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
Така че изглежда, че някъде ми липсва някакво обвързване, но не мога да намеря какво би било. Някой има ли идея?