Я новичок в этом и узнаю об этом протоколе. Во время чтения на wiki о MQTT. первая строка "MQTT [1] - это протокол обмена сообщениями" легкий вес ", основанный на публикации, для использования поверх протокола TCP/IP".
Означает ли это, что MQTT поддерживает только тему и не поддерживает или работает с очередью?
Потому что, даже я проверяю доступный клиентский API (fusesource и paho). Я не нашел API-интерфейс клиента для очереди.
ActiveMQ поддерживает MQTT, и вы можете многое прочитать здесь:
http://activemq.apache.org/mqtt.html
В последние недели аббревиатура Transport Telemetry Transport Message Queue изменяется в MQ Telemetry Transport, потому что MQTT не имеет концепции очереди! :-)
Как сказал @hardillb, публикации и подписка выполняются по темам.
Концепция "queue" реализуется только при использовании расширенного "чистого сеанса" для ложных функций, что подразумевает, что брокер сохраняет сообщения, опубликованные в теме, где клиент находится в автономном режиме, так что, когда клиент вернется в Интернет, он получит Сообщения. Однако эта реализация строго связана с брокером (не обязательно с очередью).
Я написал следующую бесплатную книгу (посвященную технологиям 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 не поддерживает очередь, если вы хотите реализовать Queue с использованием ActiveMQ. Протокол STOMP проверяет эту ссылку https://github.com/asantos2000/RabbitMQGozirraStompAndroid
если вы хотите использовать тему просто использовал queue_name = /тему/nameof_topic и если вы хотите использовать очереди используются назначение queue_name =/очередь/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);
вы получите только те сообщения, в заголовке которых указано название вашего селектора