简单实现Java消息队列之activemq

xiaoxiao2021-02-28  164

Hi ,大家好

最近在学习JMS(Java Message Service),用到的是activemq(消息队列),写了简单的例子,跟大家一起分享一下:

1.JMS和activemq之间的关系 :  JMS是一种标准规范,接口形式(消息发送是异步,非阻塞的)/activemq则是实现了JMS,存在点对点/发布订阅

2.应用场景 : 系统A---->系统B 发送消息 , 则是就需要消息系统activemq来完成这个任务

3.练习需要用到的jar包 :  activemq-core-5.7.0.jar , geronimo-j2ee-management_1.1_spec-1.0.1.jar , geronimo-jms_1.1_spec-1.1.1.jar , org.slf4j.api_1.6.4.jar

4.练习需要用到的activemq包 ,官网下载windoiws版本/linux版本(看个人喜好,建议用linux版本) , 下面的例子是windows版本,为了方便

5.下载解压之后双击运行bin目录下win64下activemq.bat

6.运行完毕之后打开web控制台进行查看验证 , 网页地址栏输入 : http://localhost:8161/admin    user : admin  pwd : admin

7.创建两个工程A和工程B编写测试类 :

package activemqA; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; //生产者 public class Sender { public static void main(String args[]){ Sender sender = new Sender(); sender.sendMessage("hello,activemqB"); } public void sendMessage(String msg){ ConnectionFactory connectionFactory = null; Connection connection = null; Session session = null; try { //1.创建连接工厂 connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); //2.得到一个连接 connection = connectionFactory.createConnection(); //3.创建一个Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //4.创建目的地 Destination destination = session.createQueue("myQueue"); //5.创建发送者 MessageProducer messageProducer = session.createProducer(destination); //6.创建文本消息 TextMessage textMessage = session.createTextMessage(msg); //7.发送消息 messageProducer.send(textMessage); } catch (JMSException e) { e.printStackTrace(); }finally{ //8.关闭connection和sessiosn try { if(connection !=null){ connection.close(); } if (session !=null) { session.close(); } } catch (JMSException e) { e.printStackTrace(); } } } }

检验消息是否发送成功请查看:web控制台会显示条数

package activemqB; 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.ActiveMQConnectionFactory; //消费者 public class Receiver { public static void main(String args[]){ Receiver receiver = new Receiver(); receiver.receiverMessage(); } public void receiverMessage(){ ConnectionFactory connectionFactory = null; Connection connection = null; Session session =null; try { //1.创建连接工厂 connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); //2.得到一个连接 connection = connectionFactory.createConnection(); //3.创建一个Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //4.创建目的地 Destination destination = session.createQueue("myQueue"); //5.创建接受者 MessageConsumer messageConsumer = session.createConsumer(destination); //6.打开连接 connection.start(); //7.接收消息 TextMessage textMessage = (TextMessage) messageConsumer.receive(1000); //8.输出验证 System.out.println("接收到的消息为:"+textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); }finally { try { if (connection !=null) { connection.close(); } if (session !=null) { session.close(); } } catch (JMSException e) { e.printStackTrace(); } } } }

8.温馨提示:需要注意的是在编写生产者时创建文本应把msg参数放进去,否则消费者这边输出是null

转载请注明原文地址: https://www.6miu.com/read-26691.html

最新回复(0)