Activemq mqtt 点对点聊天实现(转载)
Posted 寒夜美美
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activemq mqtt 点对点聊天实现(转载)相关的知识,希望对你有一定的参考价值。
我这想到一个点对点聊天的方法,不用没割人都建立一个topic了,思路还是自定义一个分发策略,具体如下:
1、 建立一个topic,所有人都用匹配订阅的方式订阅以该topic为头的topic,例如:所有人都订阅PTP/#。
2、 例如A向B发送聊天信息,B的clientId是bbb,A只需要向PTP/bbb 推送聊天信息,我写的自定义策略会针对所有PTP开头的topic做自定义分发<policyEntry topic="PTP.>">,将topic里的clientId解析出来,并将该消息只发给B。
自定义策略代码:
public class ClientIdFilterDispatchPolicy extends SimpleDispatchPolicy { public boolean dispatch(MessageReference node, MessageEvaluationContext msgContext, List<Subscription> consumers) throws Exception { System.out.println("--------------------------------来了------------------------------------------"); System.out.println(node.getMessage().getDestination().getQualifiedName()); System.out.println(node.getMessage().getDestination().getPhysicalName()); String topic = node.getMessage().getDestination().getPhysicalName(); String clientId = topic.substring(topic.indexOf(".")+1, topic.length()); System.out.println("clientId:" + clientId); System.out.println("--------------------------------end------------------------------------------"); if (clientId == null) super.dispatch(node, msgContext, consumers); ActiveMQDestination destination = node.getMessage().getDestination(); int count = 0; for (Subscription sub : consumers) { if (sub.getConsumerInfo().isBrowser()) { continue; } if (!sub.matches(node, msgContext)) { sub.unmatched(node); continue; } System.out.println("isTopic:" + destination.isTopic()); System.out.println("getClientId:" + sub.getContext().getClientId()); if ((clientId != null) && (destination.isTopic()) && (clientId.equals(sub.getContext().getClientId())) ) { sub.add(node); count++; } else { sub.unmatched(node); } } return count > 0; } }
activemq.xml
<policyEntry topic="PTP.>"> <dispatchPolicy> <clientIdFilterDispatchPolicy/> </dispatchPolicy> </policyEntry>
转载:http://www.cnblogs.com/momofeng/p/5482775.html#undefined
以上是关于Activemq mqtt 点对点聊天实现(转载)的主要内容,如果未能解决你的问题,请参考以下文章
activeMQ学习---------点对点发布订阅的消息代码实现
消息队列 ActiveMQ的简单了解以及点对点与发布订阅的方法实现ActiveMQ
基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送