Есть ли очередь поддержки MQTT в ActiveMQ?
Я новичок в этом и узнаю об этом протоколе. Пока читал в вики про MQTT. первая строка "MQTT[1] - это протокол обмена сообщениями" облегченный ", основанный на публикации и подписке, для использования поверх протокола TCP/IP".
Значит ли это, что MQTT поддерживает только тему, а не поддерживает или работает с очередью?
Потому что, даже я проверяю с доступным клиентским API (fusesource и paho). Я не нашел API клиента для очереди.
4 ответа
ActiveMQ поддерживает MQTT, и вы можете прочитать много здесь:
http://activemq.apache.org/mqtt.html
В последние недели аббревиатура Telemetry Transport в очереди сообщений была изменена в MQ Telemetry Transport, потому что MQTT не имеет концепции очереди!:-)
Как сказал @hardillb, операции публикации и подписки выполняются по темам.
Понятие "очередь" реализуется только в том случае, если вы используете расширенный "чистый сеанс" для ложных функций, что означает, что брокер сохраняет сообщения, опубликованные по теме, где клиент находится в автономном режиме, так что, когда клиент вернется в оперативный режим, он получит Сообщения. Однако эта реализация строго связана с брокером (не обязательно с очередью).
Я написал следующую бесплатную книгу (сфокусированную на технологиях Microsoft), но глава 3 посвящена самому протоколу MQTT.
http://www.embedded101.com/DevelopM2MIoTDevicesEbook.aspx
Паоло.
Да, MQTT является только темой, поддержка очереди отсутствует
MQTT не понимает очередей в соответствии с JMS или многими другими системами обмена сообщениями. MQTT понимает только темы, которые могут быть опубликованы и подписаны.
Решение, которое я пришел к использованию ActiveMQ 5.13.1 в качестве брокера MQTT, заключалось в том, чтобы включить составную тему, в которую клиент MQTT будет отправлять. ActiveMQ будет собирать сообщения, записанные в теме, и записывать их в очередь (или несколько очередей или тем) в соответствии с вашей конфигурацией. Имейте в виду, что в имени темы будут меняться точки на прямые косые черты, например, имя темы в данном примере: LOCAL.EC.T
, станет LOCAL/EC/T
, Это было верно, по крайней мере, для моей тестовой установки с использованием Eclipse Paho Client MQTTv3 1.0.2, и я считаю, что это деталь реализации MQTT.
Конфигурация ${ACTIVEMQ_HOME}/conf/activemq.xml.
<beans>
<broker>
...
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeTopic name="LOCAL.EC.T">
<forwardTo>
<queue physicalName="LOCAL.EC.Q.1" />
<queue physicalName="LOCAL.EC.Q.2" />
</forwardTo>
</compositeTopic>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
...
</broker>
</beans>
MQTT не поддерживает очередь, если вы хотите реализовать очередь с ActiveMQ, используя протокол STOMP, проверьте эту ссылку https://github.com/asantos2000/RabbitMQGozirraStompAndroid
если вы хотите использовать только что использованную тему QUEUE_NAME = / topic / nameof_topic и если вы хотите использовать целевую очередь, используемую QUEUE_NAME=/queue/nameof_queue
для фильтра сообщений в очереди добавить селекторы
Map<String,String> header=new HashMap<String, String>();
header.put("selector","(title = 'selector_name')");
con.subscribe(QUEUE_NAME, new Listener() {
@Override
public void message(Map header, String body ) {
Log.d(TAG,"onMessage()");
Log.d(TAG,"message is " + body);
Log.d(TAG,"header is " + header.toString());
message = "\n("+ counterReceive +")<-- " + body;
myHandler.post(myRunnable);
counterReceive++;
}
},header);
вы получите только те сообщения, заголовок которых содержит имя вашего селектора