Есть ли очередь поддержки MQTT в ActiveMQ?

1

Я новичок в этом и узнаю об этом протоколе. Во время чтения на wiki о MQTT. первая строка "MQTT [1] - это протокол обмена сообщениями" легкий вес ", основанный на публикации, для использования поверх протокола TCP/IP".

Означает ли это, что MQTT поддерживает только тему и не поддерживает или работает с очередью?

Потому что, даже я проверяю доступный клиентский API (fusesource и paho). Я не нашел API-интерфейс клиента для очереди.

Теги:
activemq
mqtt
paho

4 ответа

2
Лучший ответ

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

Паоло.

1

Да, MQTT - только тема, поддержка очереди отсутствует

-1

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>

Это ссылка, которую я использовал.

  • 0
    Этот комментарий был бы более полезен, если бы вы поменяли его с 'CompositTopic' на 'CompositeQueue' с forwardTo 'topic', а не с 'queue' ... Это фактически решило бы проблему отображения очереди ActiveMQ в тему MQTT.
  • 0
    Направление никогда не было указано. Данный пример отображает тему MQTT в очередь ActiveMQ. Если вам нужно обратное, то настройте соответствующим образом. У меня больше нет этой настройки, поэтому я не могу проверить, что это может быть, или если мой пример однонаправлен (я думаю, что это так).
-2

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);

вы получите только те сообщения, в заголовке которых указано название вашего селектора

Ещё вопросы

Сообщество Overcoder
Наверх
Меню