Java MQTT支持队列是否在ActiveMQ中?

Java MQTT支持队列是否在ActiveMQ中?,java,activemq,mqtt,paho,Java,Activemq,Mqtt,Paho,我是新来的,了解这个协议。在wiki上阅读有关MQTT的内容时。第一行“MQTT[1]是一个基于发布-订阅的“轻量级”消息传递协议,用于TCP/IP协议之上。” 这是否意味着MQTT只支持主题而不支持或使用队列 因为,即使我使用可用的客户端API(fusesource和paho)进行检查。我找到了队列的客户端API。是的,MQTT只支持主题,没有队列支持是的,MQTT只支持主题,没有队列支持ActiveMQ支持MQTT,您可以在这里读到很多内容: 在过去几周中,MQ Telemetry Tra

我是新来的,了解这个协议。在wiki上阅读有关MQTT的内容时。第一行“MQTT[1]是一个基于发布-订阅的“轻量级”消息传递协议,用于TCP/IP协议之上。”

这是否意味着MQTT只支持主题而不支持或使用队列


因为,即使我使用可用的客户端API(fusesource和paho)进行检查。我找到了队列的客户端API。

是的,MQTT只支持主题,没有队列支持

是的,MQTT只支持主题,没有队列支持

ActiveMQ支持MQTT,您可以在这里读到很多内容:

在过去几周中,MQ Telemetry Transport中消息队列遥测传输的首字母缩略词发生了更改,因为MQTT没有队列概念!:-)

正如@hardillb所说,发布和订阅操作是在主题上执行的

“队列”的概念只有在您使用高级的“清理会话”来设置错误功能时才能实现,这些功能意味着代理保存在客户机脱机的主题上发布的消息,以便当客户机返回联机时,它将接收消息。 但是,此实现严格地与代理相关(队列不需要)

我写了以下免费电子书(重点是微软技术),但第3章专门介绍了MQTT协议本身


Paolo.

ActiveMQ支持MQTT,您可以在这里阅读更多内容:

在过去几周中,MQ Telemetry Transport中消息队列遥测传输的首字母缩略词发生了更改,因为MQTT没有队列概念!:-)

正如@hardillb所说,发布和订阅操作是在主题上执行的

“队列”的概念只有在您使用高级的“清理会话”来设置错误功能时才能实现,这些功能意味着代理保存在客户机脱机的主题上发布的消息,以便当客户机返回联机时,它将接收消息。 但是,此实现严格地与代理相关(队列不需要)

我写了以下免费电子书(重点是微软技术),但第3章专门介绍了MQTT协议本身


Paolo.

MQTT不了解JMS或许多其他消息传递系统中的队列。MQTT只理解可以发布和订阅的主题

我使用ActiveMQ 5.13.1作为MQTT代理的解决方案是包含一个复合主题,MQTT客户机将发送到该主题。ActiveMQ将拾取写入主题的消息,并根据您的配置将它们写入队列(或多个队列或主题)。请记住,主题名称的句点将更改为正斜杠,因此,例如,给定示例中的主题名称,
LOCAL.EC.T
,将变为
LOCAL/EC/T
。至少对于使用EclipsePAHO客户机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不了解JMS或许多其他消息传递系统中的队列。MQTT只理解可以发布和订阅的主题

我使用ActiveMQ 5.13.1作为MQTT代理的解决方案是包含一个复合主题,MQTT客户机将发送到该主题。ActiveMQ将拾取写入主题的消息,并根据您的配置将它们写入队列(或多个队列或主题)。请记住,主题名称的句点将更改为正斜杠,因此,例如,给定示例中的主题名称,
LOCAL.EC.T
,将变为
LOCAL/EC/T
。至少对于使用EclipsePAHO客户机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>

...
...

如果要使用ActiveMQ使用STOMP协议实现队列,MQTT不支持队列检查此链接

如果您想使用刚刚使用的主题队列名称=/Topic/nameof\u主题,如果您想使用队列已使用的目的地队列名称=/QUEUE/nameof\u队列

对于队列中的筛选器消息,请添加选择器

 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);
Map header=newhashmap();
header.put(“选择器”,“标题='selector_name')”;
con.subscribe(队列名称,新侦听器(){
@凌驾
公共无效消息(映射头、字符串体){
d(标记“onMessage()”);
Log.d(标签,“消息为”+正文);
Log.d(标记,“header is”+header.toString());

message=“\n(“+counterReceive+”)MQTT不支持队列,如果要使用ActiveMQ实现队列,请使用STOMP协议检查此链接

如果您想使用刚刚使用的主题队列名称=/Topic/nameof\u主题,如果您想使用队列已使用的目的地队列名称=/QUEUE/nameof\u队列

对于队列中的筛选器消息,请添加选择器

 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);
Map header=newhashmap();
header.put(“选择器”,“标题='selector_name')”;
con.subscribe(队列名称,新侦听器(){
@凌驾
公共无效消息(映射头、字符串体){
d(标记“onMessage()”);