Java MQTT支持队列是否在ActiveMQ中?
我是新来的,了解这个协议。在wiki上阅读有关MQTT的内容时。第一行“MQTT[1]是一个基于发布-订阅的“轻量级”消息传递协议,用于TCP/IP协议之上。” 这是否意味着MQTT只支持主题而不支持或使用队列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
因为,即使我使用可用的客户端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()”);