activemq点对点以及发布订阅模式代码(参考前一篇jms学习理解)
来源:互联网 发布:ug怎么编程 编辑:程序博客网 时间:2024/05/18 01:58
activemq P2P和sub/pub
1.P2P
生产者
public classJmsActiveMqProduct {
private static final String USER =ActiveMQConnection.DEFAULT_USER;
private static final String PASSWORD =ActiveMQConnection.DEFAULT_PASSWORD;
private static final String BORKER_URL =ActiveMQConnection.DEFAULT_BROKER_URL;
private static final int SENDNUM = 10;
public static voidmain(String[] args) {
ConnectionFactory connectionFactory; //链接工厂,用于创建connection
Connection connection = null;//链接用于发送接收消息的通道
Session session;//会话接收或发送消息线程
Destination destination; //消息生产者发送消息(发送的位置),消费者消费消息(从何处获取)
MessageProducer messageProducer;
try {
connectionFactory = newActiveMQConnectionFactory(JmsActiveMq.USER,JmsActiveMq.PASSWORD, JmsActiveMq.BORKER_URL);
connection = connectionFactory.createConnection();
connection.start();
session =connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); //支持事务 自动持久化
destination = session.createQueue("ActiveMQ_Producter");
messageProducer =session.createProducer(destination);
sendMessage(session,messageProducer);
session.commit();
} catch(JMSException e) {
e.printStackTrace();
}finally{
if(connection!=null){
try {
connection.close();
} catch(JMSException e) {
e.printStackTrace();
}
}
}
}
public static voidsendMessage(Session session,MessageProducer messageProducer)
throws JMSException{
for(inti=0;i<JmsActiveMq.SENDNUM;i++){
TextMessagetxtMessage = session.createTextMessage("ActiveMQ_Producter发送消息"+i);
System.out.println("发送消息"+i);
messageProducer.send(txtMessage);//发送消息
}
}
}
消费者
public class JmsActiveMqCustmer{
private static final String USER =ActiveMQConnection.DEFAULT_USER;
private static final String PASSWORD =ActiveMQConnection.DEFAULT_PASSWORD;
private static final String BORKER_URL =ActiveMQConnection.DEFAULT_BROKER_URL;
private static final long RECEIVENUM = 100000;
public static voidmain(String[] args) {
ConnectionFactory connectionFactory;
Connection connection;
Session session;
Destination destination;
MessageConsumer messageConsumer;
try {
connectionFactory= new ActiveMQConnectionFactory(JmsCustmer.USER,JmsCustmer.PASSWORD, JmsCustmer.BORKER_URL);
connection= connectionFactory.createConnection();
connection.start();
session= connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
destination= session.createQueue("ActiveMQ_Producter");
messageConsumer= session.createConsumer(destination);
while(true){
TextMessage mesg=(TextMessage) messageConsumer.receive(JmsCustmer.RECEIVENUM);
if(mesg!=null){
System.out.println("接收消息"+mesg.getText());
}else{
break;
}
}
} catch(JMSException e) {
e.printStackTrace();
}
}
}
使用监听器(异步)
public class Listenter implementsMessageListener {
@Override
public voidonMessage(Message message) {
// TODOAuto-generated method stub
TextMessagetextMessage=(TextMessage)message;
try {
System.out.println("收到的消息=====:"+textMessage.getText());
} catch(JMSException e) {
e.printStackTrace();
}
}
}
异步消费者中添加
messageConsumer.setMessageListener(newListenter());
2.pub/sub
生产者
public class HelloTopicProducer {
public void send(String msg) {
// 生产者的主要流程
Connection connection = null;
try {
// 1.初始化connection工厂,使用默认的URL
//failover://tcp://localhost:61616
ConnectionFactoryconnectionFactory = new ActiveMQConnectionFactory();
// 2.创建Connection
connection =connectionFactory.createConnection();
// 3.打开连接
connection.start();
// 4.创建Session,(是否支持事务)
Session session =connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建消息目标
Destination destination_send =session.createTopic(MQConstants.DESTINATION_SEND);
// 6.创建生产者
MessageProducerproducer = session.createProducer(destination_send);
// 7.配置消息是否持久化
/*
* DeliverMode有2种方式:
* public interface DeliveryMode { static finalint NON_PERSISTENT =
* 1;//不持久化:服务器重启之后,消息销毁
* static final int PERSISTENT = 2;//持久化:服务器重启之后,该消息仍存在 }
*/
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 8.初始化要发送的消息
TextMessage message= session.createTextMessage(msg);
// 9.发送消息
producer.send(message);
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
public static void main(String[] args){
newHelloTopicProducer().send("我来试一试发布/订阅...");
}
}
消费者
public classHelloTopicConsumer implements MessageListener {
@Override
//消费者继承MessageListener内部定义监听器
public void onMessage(Message message){
if (message instanceofTextMessage) {
TextMessage txtMsg =(TextMessage) message;
try {
System.out.println("哈,我接收到了消息:" + txtMsg.getText());
} catch(JMSException e) {
e.printStackTrace();
}
}
}
public void receive() {
// 消费者的主要流程
Connection connection = null;
try {
// 1.初始化connection工厂
ConnectionFactoryconnectionFactory = new ActiveMQConnectionFactory();
// 2.创建Connection
connection =connectionFactory.createConnection();
// 3.打开连接
connection.start();
// 4.创建session
Session session =connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建消息目标
Destinationdestination = session.createTopic(MQConstants.DESTINATION_SEND);
// 6.创建消费者
MessageConsumerconsumer = session.createConsumer(destination);
// 7.配置监听
consumer.setMessageListener(newHelloTopicConsumer());
} catch (JMSException e) {
e.printStackTrace();
}
}
public static void main(String[] args){
//测试
newHelloTopicConsumer().receive();
}
}
测试。。。
- activemq点对点以及发布订阅模式代码(参考前一篇jms学习理解)
- jms消息机制,包括点对点、发布/订阅模式
- jms点对点和订阅发布模式的详解
- activeMQ消息中间件之点对点与发布订阅模式实现
- ActiveMQ发布-订阅消息模式(同点对点模式的区别)
- jms点对点API,发布/订阅API
- activemq 点对点demo [代码参考]
- ActiveMQ发布订阅模式
- ActiveMQ发布订阅模式
- activemq 发布订阅模式
- ActiveMQ发布订阅模式
- ActiveMQ发布订阅模式
- activeMQ 点对点以及发布与订阅 - 以及spring的整合&集群方式
- jms activeMQ发布与订阅入门实例
- activeMq的发布订阅模式
- ActiveMQ的发布订阅模式
- JMS学习六(ActiveMQ Topic之持久订阅)
- 消息队列模式:点对点 与 发布订阅
- 课本8.19 kite问题的NP完全问题证明
- iOS 蓝牙使用
- 对网络应用层的理解(二)
- hdu2444 The Accomodation of Students【二分图判断+最大匹配】
- 关于DOM的一些常用标签属性等小结
- activemq点对点以及发布订阅模式代码(参考前一篇jms学习理解)
- 统计学习方法笔记之十----隐马尔科夫模型(一)
- spring加载xsd文件时报错
- 1061. 判断题(15)
- Unity3D 官方文档 UGUI的总览 Canvas和EventSystem的认识
- K&R《C程序设计语言》p23:打印最长的输入行
- ejs模板引擎
- CFgym:Memory Manager(dp & 单调队列优化)
- 文章标题