消息中间件jms(代码片段)

cracker13 cracker13     2023-01-19     754

关键词:

一.什么是消息中间件  

   消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。

  ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。

  

  对于消息的传递有两种类型:

    一种是点对点的,即一个生产者和一个消费者一一对应;

    技术分享图片

    另一种是发布/ 订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。 

    技术分享图片

二.ActiveMQ下载与安装

  1.官方网站下载:http://activemq.apache.org/

  2.centos上安装ActiveMQ

    1)将apache-activemq-5.12.0-bin.tar.gz 上传至服务器

    2)解压

      tar  zxvf  apache-activemq-5.12.0-bin.tar.gz

    3)为apache-activemq-5.12.0目录赋权

      chmod 777 apache-activemq-5.12.0

    4)进入apache-activemq-5.12.0in目录,赋与执行权限

     chmod 755 activemq 

  3.启动  

    ./activemq start

    启动成功出现如下信息

    技术分享图片

  4.打开浏览器输入服务器地址

    http://192.168.56.102:8161

    即可访问管理界面

    技术分享图片

    点击Manage ActiveMQ broker登录,登录名和密码均为admin

  5.点对点消息列表Queues  

  技术分享图片  

    Number Of Pending Messages  :等待消费的消息 这个是当前未出队列的数量。
    Number Of Consumers  :消费者 这个是消费者端的消费者数量
    Messages Enqueued  :进入队列的消息  进入队列的总数量,包括出队列的。
    Messages Dequeued  :出了队列的消息  可以理解为是消费这消费掉的数量。

三.测试案例

  1.点对点模式

    1.1消息生产者

    1)创建Maven工程,引入依赖

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-client</artifactId>
    <version>5.13.4</version>
</dependency>

    2)创建类QueueProducer  main方法代码如下:

    //1.创建连接工厂
    ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.25.135:61616");
    //2.获取连接
    Connection connection = connectionFactory.createConnection();
    //3.启动连接
    connection.start();
    //4.获取session  (参数1:是否启动事务,参数2:消息确认模式)
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        
    //5.创建队列对象
    Queue queue = session.createQueue("test-queue");
    //6.创建消息生产者
    MessageProducer producer = session.createProducer(queue);
    //7.创建消息
    TextMessage textMessage = session.createTextMessage("欢迎来到ActiveMQ世界");
    //8.发送消息
    producer.send(textMessage);
    //9.关闭资源
    producer.close();
    session.close();
    connection.close();    

    上述代码中第4步创建session  的两个参数: 

    第2个参数 消息的确认模式

  • AUTO_ACKNOWLEDGE = 1    自动确认
  • CLIENT_ACKNOWLEDGE = 2    客户端手动确认   
  • DUPS_OK_ACKNOWLEDGE = 3    自动批量确认
  • SESSION_TRANSACTED = 0    事务提交并确认

    运行后通过ActiveMQ管理界面查询 

  技术分享图片

    1.2 消息消费者

    创建类QueueConsumer ,main方法代码如下:

    //1.创建连接工厂
    ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.56.102:61616");
    //2.获取连接
    Connection connection = connectionFactory.createConnection();
    //3.启动连接
    connection.start();
    //4.获取session  (参数1:是否启动事务,参数2:消息确认模式)
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    //5.创建队列对象
    Queue queue = session.createQueue("test-queue");
    //6.创建消息消费
    MessageConsumer consumer = session.createConsumer(queue);
    
    //7.监听消息
    consumer.setMessageListener(new MessageListener() 
        public void onMessage(Message message) 
            TextMessage textMessage=(TextMessage)message;
            try 
                System.out.println("接收到消息:"+textMessage.getText());
             catch (JMSException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
            
        
    );    
    //8.等待键盘输入
    System.in.read();    
    //9.关闭资源
    consumer.close();
    session.close();
    connection.close();    

    执行后看到控制台输出:欢迎来到神奇的ActiveMq世界

    1.3 运行测试

    同时开启2个以上的消费者,再次运行生产者,观察每个消费者控制台的输出,会发现只有一个消费者会接收到消息。

  2.发布订阅模式

    2.1消息生产者

    创建类TopicProducer ,main方法代码如下:

  

//1.创建连接工厂
    ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.56.102:61616");
    //2.获取连接
    Connection connection = connectionFactory.createConnection();
    //3.启动连接
    connection.start();
    //4.获取session  (参数1:是否启动事务,参数2:消息确认模式)
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    //5.创建主题对象
    Topic topic = session.createTopic("test-topic");
    //6.创建消息生产者
    MessageProducer producer = session.createProducer(topic);
    //7.创建消息
    TextMessage textMessage = session.createTextMessage("欢迎来到神奇的ActiveMq世界");
    //8.发送消息
    producer.send(textMessage);
    //9.关闭资源
    producer.close();
    session.close();
    connection.close();

    2.2消息消费者

    创建类TopicConsumer ,main方法代码如下:

    

    //1.创建连接工厂
    ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.56.102:61616");
    //2.获取连接
    Connection connection = connectionFactory.createConnection();
    //3.启动连接
    connection.start();
    //4.获取session  (参数1:是否启动事务,参数2:消息确认模式)
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    //5.创建主题对象
    //Queue queue = session.createQueue("test-queue");
    Topic topic = session.createTopic("test-topic");
    //6.创建消息消费
    MessageConsumer consumer = session.createConsumer(topic);
    
    //7.监听消息
    consumer.setMessageListener(new MessageListener() 
        public void onMessage(Message message) 
            TextMessage textMessage=(TextMessage)message;
            try 
                System.out.println("接收到消息:"+textMessage.getText());
             catch (JMSException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
            
        
    );
    //8.等待键盘输入
    System.in.read();
    //9.关闭资源
    consumer.close();
    session.close();
    connection.close();    

    2.3 运行测试

      同时开启2个以上的消费者,再次运行生产者,观察每个消费者控制台的输出,会发现每个消费者会接收到消息。 






flea-msg使用之jms初识(代码片段)

...avaMessageService】,又简称JMS,它是Java平台上有关面向消息中间件(MOM)的技术规范。1.2JMS规范JMS中虽然定义了Java中访问消息中间件的接口,但并没有给予实现。实现JMS接口的消息中间件称为JMSProvider,例如ActiveMQ、RocketMQ等等。下面... 查看详情

一:activemq知识整理(代码片段)

...sageService)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。JM... 查看详情

消息中间件系列一:入门jms规范activemq使用(代码片段)

一、入门1.消息中间件的定义没有标准定义,一般认为,采用消息传送机制/消息队列的中间件技术,进行数据交流,用在分布式系统的集成2.为什么要用消息中间件解决分布式系统之间消息的传递。电商场景:用户下单减库存,... 查看详情

flea-msg使用之jms初识(代码片段)

...Service】,又简称JMS,它是Java平台上有关面向消息中间件(MOM)的技术规范。1.2JMS规范JMS中定义了Java中访问消息中间件的接口,并没有给予实现,实现JMS接口的消息中间件称为JMSProvider,例如ActiveMQ、RocketMQ等等。... 查看详情

常见消息中间件大pk(代码片段)

...ctiveMQ2.2RabbitMQ2.3RocketMQ2.4Kafka2.5ZeroMQ2.6其他3.比较说到消息中间件,估计大伙多多少少都能讲出来一些,ActiveMQ、RabbitMQ、RocketMQ、Kafka等等各种以及JMS、AMQP等各种协议,然而这些消息中间件各自都有什么特点,我们... 查看详情

消息中间件之activemq之一(代码片段)

...开源的,完全支持JMS1.1和J2EE1.4规范的JMSProvider实现的消息中间件(MessageOrientedMiddleware,MOM)。1.2ActiveMQ能做什么?最主要的功能就是:实现JMS规范的Provider,用来帮助实现高可用、高性能、可伸缩、易用和安全的企业级面向消息... 查看详情

actionmq(代码片段)

消息中间件概述消息中间件产生的背景在客户端与服务器进行通讯时.客户端调用后,必须等待服务对象完成处理返回结果才能继续执行。 客户与服务器对象的生命周期紧密耦合,客户进程和服务对象进程都都必须正常运行;如... 查看详情

消息中间件-----概述jms以及activemq简介(代码片段)

什么是消息中间件?定义其实并没有标准定义。一般认为,消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用高效可靠的异步消息传递机制对分布式系统中的其余各个子系统进行集成。 为什么要用消... 查看详情

jms消息中间件原理及activemq用法

...sageService)应用程序接口。是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息。进行异步通.本文接受了JMS的基础知识。业务需求以及功能实现等。  JMS基础---》需求----... 查看详情

activemq系列教程-简介与环境搭建(代码片段)

...sageService)应用程序接口,是一个Java平台中关于面向消息中间件(MessageOrientedMiddleWare)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都... 查看详情

消息中间件--activemq&jms消息服务

###消息中间件### ---------- **消息中间件** 1.消息中间件的概述2.消息中间件的应用场景(查看大纲文档,了解消息队列的应用场景)*异步处理*应用解耦*流量削峰*消息通信 ---------- ###JMS消息服务### ----------&nb... 查看详情

windows64位rabbitmq安装配置(代码片段)

...通常使用定时任务来解决异步通信问题,分布式常用消息中间件,为了在不同语言不同平台中扩展,使用遵从AMQP协议的rabbitMQ来做消息中间件。    MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断... 查看详情

消息中间件之activemq(代码片段)

一,简介ActiveMQ是较优秀的JMS实现框架,在异步消息通信方面有简单便捷,性能良好的优点。二,安装下载地址:http://mirror.bit.edu.cn/apache/activemq/解压即可三,启动windows启动linux启动四,java应用依赖的包:activemq-all-5.12.0.jar发送... 查看详情

jms基本概念

...息服务,是javaEE中的一个技术。JMS定义了java中访问消息中间件的接口,并没有给予实现,实现了JMS接口的消息中间件叫做JMSProvider,比如ActiveMQ。 JMSprovider:实现了JMS接口和规范的消息中间件。JMSmessage:JMS的消息,JMS消息由... 查看详情

使用activemq实现jms异步调用(代码片段)

...eMQ为例进行讲解。ActiveMQ是Java世界中最为流行的开源消息中间件,它不仅功能强大,而且性能稳定。它可全面支持JMS(Java消息服务)技术规范,为Java应用程序提供标准的JMSAPI。此外ActiveMQ具备与Spring框架整合的能力,它一直都... 查看详情

jms-消息中间件的应用01-基本概念-来自慕课学习-新手学习

...JavaMessageService),即JMS,是一个java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。  定义:JavaAPI  评价:JMS定义了JavaAPI层面的标准;在Java体系中,多个client均可以... 查看详情

activimq

1.ActiviMQ是实现JMS接口和规范的消息中间件(Provider),2.JMS,JavaMessageService,java消息服务,是JavaEE中的一个技术3.JMS规范:JMS定义了Java中访问消息中间件的接口,并没有给予实现,实现JMS接口的消息中间件成为JMSProvider,例如Acti... 查看详情

activemq概念介绍(代码片段)

...源项目,完全支持JMS1.1和J2EE1.4规范的JMSProvider实现,消息中间件。消息中间件:A传递消息到B(功能或者系统),有比较强的耦合关系,但是耦合关系会带来一些问题,需要将AB断开但是AB之间有依赖关系,需要找一个第三方M,进行... 查看详情