ActiveMQ 点对点(p2p)
来源:互联网 发布:医疗器械软件哪家好 编辑:程序博客网 时间:2024/05/15 14:03
p2p的过程则理解起来更加简单。它好比是两个人打电话,这两个人是独享这一条通信链路的。一方发送消息,另外一方接收,就这么简单。在实际应用中因为有多个用户对使用p2p的链路,它的通信场景如下图所示:
我们再来看看一个p2p的示例:
在p2p的场景里,相互通信的双方是通过一个类似于队列的方式来进行交流。和前面pub-sub的区别在于一个topic有一个发送者和多个接收者,而在p2p里一个queue只有一个发送者和一个接收者。
发送者
和前面的示例非常相似,我们构造函数里需要初始化的内容基本上差不多:
public Publisher() throws JMSException { factory = new ActiveMQConnectionFactory(brokerURL); connection = factory.createConnection(); connection.start(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); producer = session.createProducer(null); }
发送消息的方法如下:
public void sendMessage() throws JMSException { for(int i = 0; i < jobs.length; i++) { String job = jobs[i]; Destination destination = session.createQueue("JOBS." + job); Message message = session.createObjectMessage(i); System.out.println("Sending: id: " + ((ObjectMessage)message).getObject() + " on queue: " + destination); producer.send(destination, message); }}
消息发送者的启动代码如下:
public static void main(String[] args) throws JMSException { Publisher publisher = new Publisher(); for(int i = 0; i < 10; i++) { publisher.sendMessage(); System.out.println("Published " + i + " job messages");try { Thread.sleep(1000); } catch (InterruptedException x) { e.printStackTrace(); } } publisher.close();}
接收者
接收者的代码很简单,一个构造函数初始化所有的资源:
public Consumer() throws JMSException { factory = new ActiveMQConnectionFactory(brokerURL); connection = factory.createConnection(); connection.start(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); }
public static void main(String[] args) throws JMSException { Consumer consumer = new Consumer(); for (String job : consumer.jobs) { Destination destination = consumer.getSession().createQueue("JOBS." + job); MessageConsumer messageConsumer = consumer.getSession().createConsumer(destination); messageConsumer.setMessageListener(new Listener(job)); } }public Session getSession() {return session;}
具体注册的对象处理方法和前面还是类似,实现MessageListener接口就可以了。
import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.ObjectMessage;public class Listener implements MessageListener {private String job;public Listener(String job) {this.job = job;}public void onMessage(Message message) {try {//do something hereSystem.out.println(job + " id:" + ((ObjectMessage)message).getObject());} catch (Exception e) {e.printStackTrace();}}}
这里代码和前面pub-sub的具体实现代码非常相似,就不再赘述。
现在如果我们比较一下pub-sub和p2p模式的具体实现步骤的话,我们会发现他们基本的处理流程都是类似的,除了在pub-sub中要通过createTopic来设置topic,而在p2p中要通过createQueue来创建通信队列。他们之间存在着很多的重复之处,在具体的开发过程中,我们是否可以进行一些工程上的优化呢?别急,后面我们会讨论到的。
1 0
- ActiveMQ 点对点(p2p)
- ActiveMQ之P2P点对点通信方式
- 点对点(P2P)的实现
- activeMQ之点对点(p2p)发送与接收消息
- ActiveMQ点对点模式(PTP)
- ActiveMQ实战(二)--ActiveMQ的通信方式之P2P点对点通信(point-to-point)
- P2P技术的概念(即点对点)
- NFC应用(三)点对点(P2P)通信
- activeMQ之点对点(PTP),监听器模式
- (二)ActiveMQ 点对点系统模型
- Spring整合activeMq(一):点对点模式
- ActiveMQ 官方demo (p2p)
- P2P点对点通讯
- activeMq的点对点发送
- ActiveMQ 点对点消息实现
- ActiveMQ入门:点对点模型
- Activemq点对点模式
- activemq点对点模式
- Android Matrix详解
- Oracle如何实现类似MySQL的show create table,show index的功能
- 【转载】PHP使用empty检查函数返回结果时报Fatal error: Can't use function return value in write context的问题
- jmap | jstack 报错
- google打不开,修改google hosts
- ActiveMQ 点对点(p2p)
- Swift学习之二:注释与分号
- 湘潭oj_1252 Defense Tower
- 关于input的file之change事件只第一次有效的问题
- 如何修改Apache的默认站点目录
- read和write系统调用以及getchar的实现
- Scala:建立对象
- Android 百度地图开发 坐标误差问题
- 服文本