Publisher/Subscriber(发布/订阅者)消息模式开发流程
来源:互联网 发布:sql in 连接的用法 编辑:程序博客网 时间:2024/05/16 14:52
实际上上 该模式的作用是发布者和订阅者 可以相互发送消息
发布者和订阅者都充当 生产者和消费者
演示代码
发布者
package publisher.to.subscriber;
import java.awt.font.TextMeasurer;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQTopic;
public class Publisher implements MessageListener {
/**
* @param args
* @throws JMSException
*/
public static void main(String[] args) throws JMSException {
// TODO Auto-generated method stub
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
Connection connection = factory.createConnection();
connection.start();
// 第一个参数设置是否需要事务支持
Session session = connection.createSession(true,
Session.AUTO_ACKNOWLEDGE);
// 发送消息 而 订阅者接受消息必须有个topic 名字也叫 msg.send
Destination sendTopic = new ActiveMQTopic("msg.message");
// 接受消息 而 订阅者发送消息必须有个topic 名字也叫 msg.receive
Destination sendReceive = new ActiveMQTopic("msg.control");
MessageProducer producer = session.createProducer(sendTopic);
MessageConsumer consumer = session.createConsumer(sendReceive);
Rec rec = new Rec(consumer,session,connection,producer);
rec.start();
}
public void onMessage(Message msg) {
// TODO Auto-generated method stub
}
}
class Rec extends Thread {
private MessageConsumer consumer = null;
private Session session = null;
private Connection connection=null;
MessageProducer producer=null;
public Rec(MessageConsumer consumer, Session session,Connection connection,MessageProducer producer) {
this.consumer = consumer;
this.session = session;
this.connection=connection;
this.producer=producer;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
TextMessage smsg = session.createTextMessage("hello my name is liaomin");
producer.send(smsg);
session.commit();
TextMessage msg = (TextMessage) consumer.receive();
System.out.println(msg.getText());
// 接收时必须提交以下 否则会出现上次收到的旧数据
session.commit();
session.close();
connection.close();
break;
} catch (Exception e) {
}
}
}
}
订阅者
package publisher.to.subscriber;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQTopic;
public class Subscriber {
/**
* @param args
* @throws JMSException
*/
public static void main(String[] args) throws JMSException {
// TODO Auto-generated method stub
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
Connection connection = factory.createConnection();
connection.start();
// 第一个参数设置是否需要事务支持
Session session = connection.createSession(true,
Session.AUTO_ACKNOWLEDGE);
//订阅者接受消息
Destination receiveTopic = new ActiveMQTopic("msg.message");
//订阅者发送消息
Destination sendTopic = new ActiveMQTopic("msg.control");
MessageProducer producer = session.createProducer(sendTopic);
MessageConsumer consumer = session.createConsumer(receiveTopic);
Rec1 rec = new Rec1(consumer,session,connection,producer);
rec.start();
}
public void onMessage(Message msg) {
// TODO Auto-generated method stub
}
}
class Rec1 extends Thread {
private MessageConsumer consumer = null;
private Session session = null;
private Connection connection;
private MessageProducer producer;
public Rec1(MessageConsumer consumer, Session session,Connection connection,MessageProducer producer) {
this.consumer = consumer;
this.session = session;
this.connection=connection;
this.producer=producer;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
TextMessage msg = (TextMessage) consumer.receive();
session.commit();
System.out.println(msg.getText());
TextMessage remsg = session.createTextMessage("ok receive");
producer.send(remsg);
// 接收时必须提交以下 否则会出现上次收到的旧数据
session.commit();
session.close();
connection.close();
break;
} catch (Exception e) {
}
}
}
}
先运行 订阅者 在运行 发布者 试看效果
- AMQ: Publisher/Subscriber(发布/订阅者)消息模式开发流程
- Publisher/Subscriber(发布/订阅者)消息模式开发流程
- ROS 编写消息发布器(publisher)和订阅器(subscriber)-精简
- 创建ROS消息发布器(publisher)、订阅器(subscriber)
- ROS(二)自己动手写一个简单的发布(Publisher)、订阅(Subscriber)程序
- ROS学习第五弹(发布和订阅 Python写 Publisher and Subscriber)
- 发布-订阅消息模式
- 发布-订阅消息模式
- 发布-订阅消息模式
- 发布-订阅消息模式
- 消息中间件ActiveMQ(4)--Publisher/Subscriber实验
- ROS的初步学习(五)--自己写一个简单的发布(Publisher)、订阅(Subscriber)程序
- ROS 学习 (1):publisher和subscriber消息 python
- ROS 学习 (1):publisher和subscriber消息 C++1
- 观察者模式:消息的发布与订阅
- JMS消息机制--发布-订阅模式
- 消息队列及发布/订阅模式
- 消息队列模式:点对点 与 发布订阅
- 焦点在子Activity的listView时ActivityGroup无法响应Menu键的问题
- HASH JOIN ,SORT MERGE JOIN ,NESTED LOOP
- 把WPF Dialog转成WinForm Dialog需要注意的问题
- 跨域资源共享的10种方式(原贴地址:http://ued.koubei.com/?p=1291)
- HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth
- Publisher/Subscriber(发布/订阅者)消息模式开发流程
- Oracle不同行的某列字符串相加,去除重复值
- Silverlight窗体间传值
- c++ 关于对象浅复制的一些疑问,希望懂得大虾给我解释解释~~
- 网络笔记4
- JavaScript对象的创建
- eclipse jee调试servlet配置
- Windows Azure真实案例:GXS --开发者提升了灵活性,使用基于Web的供应链管理工具降低花费
- 关于字符串的java程序