Я хотел бы получать сообщения MQTT в Wildfly 11 со встроенным Apache Artemis.
Текущее состояние:
Я добавил поддержку протокола MQTT во встроенный Apache Artemis Wildfly (добавил "отсутствующую" папку и 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
Не удалось найти никаких привязок для address = testEndpoint в сообщении = 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
Сообщение 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
Похоже, что где-то не хватает какой-то привязки, но я не могу найти, что это было бы. У кого-нибудь есть идеи?