Java消息机制 ActiveMQ实例概述
来源:互联网 发布:塔罗牌占卜软件 编辑:程序博客网 时间:2024/06/05 00:56
Step1:下载安装
Download URL : http://activemq.apache.org/download.html
Version : apache-activemq-5.11.0-bin.zip
Step2: 运行ActiveMQ,启动服务
基于电脑不同位数,运行win32或者win64目录下的activemq.bat
Step3:客户端界面
URL: http://localhost:8161/admin/
用户名&密码:admin/admin
Step4: ActiveMQ API使用
Maven依赖:
<dependencies><!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-all --><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-all</artifactId><version>5.11.0</version></dependency></dependencies>
1.基于点对点的模式
消息生产者:
package com.harry.activitymq.demo;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageProducer;import javax.jms.Session;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;/** * 消息生产者 * @author Harry Wan * */public class JMSProducer {public static final String USERNAME = ActiveMQConnection.DEFAULT_USER; //apache默认提供的用户名public static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//apache默认提供的密码public static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认的链接地址,消息总线(failover://tcp://localhost:61616)public static final Integer SEND_COUNT = 10; //发送10条消息public static void main(String[] args) {try {//实例化链接工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKER_URL);//通过链接工厂获取链接Connection connection = connectionFactory.createConnection();//启动链接connection.start();//创建session消息总线,true=是否启动事物,Session.AUTO_ACKNOWLEDGE = 自动确认客户端受到的消息 Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);//通过session创建消息队列,指向消息的目的地址Destination destination = session.createQueue("First");//创建消息生产者MessageProducer messageProducer = session.createProducer(destination);for (int i = 0; i < SEND_COUNT; i++) {//Session 创建消息实体Message msg = session.createTextMessage("ActivityMQ Send Msg: " + i);//生产者发送消息messageProducer.send(msg);//添加了事物,最后提交发送session.commit();System.out.println("Message has been sent: " + i );}} catch (JMSException e) {e.printStackTrace();}}}
消息消费者:
package com.harry.activitymq.demo;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MessageConsumer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;/** * 消息的消费者(点对点方式) * * @author Harry Wan * */public class JMSConsumer {public static final String USERNAME = ActiveMQConnection.DEFAULT_USER; // apache默认提供的用户名public static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;// apache默认提供的密码public static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;// 默认的链接地址,消息总线(failover://tcp://localhost:61616)public static void main(String[] args) {try {//实例化链接工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKER_URL);//通过链接工厂获取链接Connection connection = connectionFactory.createConnection();//启动链接connection.start();Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//通过session创建消息队列,指向消息的目的地址Destination destination = session.createQueue("First");//创建消息的消费者MessageConsumer messageConsumer = session.createConsumer(destination);for (;;) {TextMessage textMessage = (TextMessage)messageConsumer.receive(1000);// 每隔1000ms接受一次if(textMessage != null){System.out.println("收到的消息: " + textMessage.getText());}else{break;}}} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
注: 这里消息的消费者,一直处于无限循环的方式每隔1000ms接收一次消息,实际开发中通常是使用注册监听的方式,当有消息产生时,触发监听器从而接受消息。
监听器实现:
package com.harry.activitymq.demo;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;public class Listener implements MessageListener {/** * 消息监听 */public void onMessage(Message message) {try {System.out.println("收到的消息: " + ((TextMessage) message).getText());} catch (JMSException e) {e.printStackTrace();}}}
try {//实例化链接工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKER_URL);//通过链接工厂获取链接Connection connection = connectionFactory.createConnection();//启动链接connection.start();Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//通过session创建消息队列,指向消息的目的地址Destination destination = session.createQueue("First");//创建消息的消费者MessageConsumer messageConsumer = session.createConsumer(destination);messageConsumer.setMessageListener(new Listener());//注册消息监听} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();}
2.基于发布订阅的模式
消息发布者:
package com.harry.activitymq.publish.demo;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageProducer;import javax.jms.Session;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;/** * 消息发布者 * @author Harry Wan * */public class JMSPublisher {public static final String USERNAME = ActiveMQConnection.DEFAULT_USER; //apache默认提供的用户名public static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//apache默认提供的密码public static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认的链接地址,消息总线(failover://tcp://localhost:61616)public static final Integer SEND_COUNT = 10; //发送10条消息public static void main(String[] args) {try {//实例化链接工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKER_URL);//通过链接工厂获取链接Connection connection = connectionFactory.createConnection();//启动链接connection.start();//创建session消息总线,true=是否启动事物,Session.AUTO_ACKNOWLEDGE = 自动确认客户端受到的消息 Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);//通过session创建消息队列,指向消息的目的地址//Destination destination = session.createQueue("First");Destination destination = session.createTopic("FirstTopic");//创建消息生产者MessageProducer messageProducer = session.createProducer(destination);for (int i = 0; i < SEND_COUNT; i++) {//Session 创建消息实体Message msg = session.createTextMessage("ActivityMQ Send Msg: " + i);//生产者发送消息messageProducer.send(msg);//添加了事物,最后提交发送session.commit();System.out.println("Message has been publish: " + i );}} catch (JMSException e) {e.printStackTrace();}}}
消息的订阅者:
package com.harry.activitymq.publish.demo;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MessageConsumer;import javax.jms.Session;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;/** * 消息的订阅者(发布订阅方式) * * @author Harry Wan * */public class JMSubscriber {public static final String USERNAME = ActiveMQConnection.DEFAULT_USER; // apache默认提供的用户名public static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;// apache默认提供的密码public static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;// 默认的链接地址,消息总线(failover://tcp://localhost:61616)public static void main(String[] args) {try {//实例化链接工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKER_URL);//通过链接工厂获取链接Connection connection = connectionFactory.createConnection();//启动链接connection.start();Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//通过session创建消息队列,指向消息的目的地址//Destination destination = session.createQueue("First");//创建消息订阅者Destination destination = session.createTopic("FirstTopic");//创建消息的消费者MessageConsumer messageConsumer = session.createConsumer(destination);messageConsumer.setMessageListener(new Listener());//注册消息监听} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
相比较于点对点的发送,主要是将创建的消息队列改为创建会话,发布会话所有的订阅者都能接收,1对多模式
实际开发中用的比较多的也是发布订阅模式
Final: 消息的状态,以及消息的发布者,消费者,消息队列等均可以在客户端界面进行管理!!
阅读全文
1 0
- Java消息机制 ActiveMQ实例概述
- java 消息机制 ActiveMQ实例
- java 消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- java消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- Java消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ入门实例
- java 消息机制 ActiveMQ
- java 消息机制 ActiveMQ
- VS2015与VM虚拟机自用资源
- C# out、ref、params、可变参数、命名参数详解
- 15个顶级Java多线程面试题及答案
- Android开发做一个简单的音乐播放器
- 机器学习之朴素贝叶斯法
- Java消息机制 ActiveMQ实例概述
- hdu -2837(指数循环节+欧拉函数)
- 将博客搬至CSDN
- HDU
- HDU 1874 畅通工程续 【最短路入门题】
- 工厂模式
- Javascript(二)
- vue-cli安装出错
- 【EntityFramework 6.1.3】个人理解与问题记录(3)