ActiveMQ学习笔记1--队列模式的消息机制


1.创建生产者

在pom.xml文件中添加依赖:

<!-- 添加activemq依赖 -->
    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-all</artifactId>
      <version>5.15.4</version>
    </dependency>

一般步骤:创建ConnectionFactory-->创建Connection-->启动连接-->创建Session-->创建目标Destination-->创建生产者MessageProducer-->创建消息TextMessage-->发送消息-->关闭连接

public class AppProvider {
 
 private static final String URL="tcp://127.0.0.1:61616";
 private static final String QUEUE_NAME="queue_test";

 public static void main(String[] args){
  ConnectionFactory connectionFactory=null;
  Connection conn=null;
  try {
   //1.创建ConnectionFactory
   connectionFactory=new ActiveMQConnectionFactory(URL);
   //2.创建Connection
   conn=connectionFactory.createConnection();
   //3.启动连接
   conn.start();
   //4.创建Session
   Session session=conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
   //5.创建目标Destination
   Destination destination=session.createQueue(QUEUE_NAME);
   //6.创建生产者MessageProducer
   MessageProducer producer=session.createProducer(destination);
   
   for(int i=0;i<10;i++){
    //7.创建消息
    TextMessage message=session.createTextMessage("test"+i);
    //8.发送消息
    producer.send(message);
    System.out.println("发送消息:"+message.getText());
   }
  } catch (JMSException e) {
   e.printStackTrace();
  } finally{
   if (conn!=null) {
    try {
     //9.关闭连接
     conn.close();
    } catch (JMSException e) {
     e.printStackTrace();
    }
   }
  }
 }


2.启动ActiveMQ服务,进入浏览器访问http://127.0.0.1:8161/admin/queues.jsp可以看到如下:

一个名为queue_test的消息队列已创建完成,消息数是10,点击queue_test链接可以看到具体的消息如下:

10个消息ID对应10个Message,点击MessageID链接可以看到具体消息相关内容:

3.创建消费者

一般步骤:创建ConnectionFactory-->创建Connection-->启动连接-->创建Session-->创建目标Destination-->创建消费者MessageConsumer-->创建消息监听器MessageListener-->接收消息-->关闭连接(注意接收消息是一个异步过程,所以要在消息接收完毕后再关闭连接)

public class AppConsumer {
	
	private static final String URL="tcp://127.0.0.1:61616";
	private static final String QUEUE_NAME="queue_test";
	
	public static void main(String[] args) throws JMSException{
		ConnectionFactory connectionFactory=null;
		Connection conn=null;
		try {
			//1.创建ActiveMQConnectionFactory对象
			connectionFactory=new ActiveMQConnectionFactory(URL);
			//2.创建Connection对象
			conn=connectionFactory.createConnection();
			//3.启动连接
			conn.start();
			//4.创建Session对象
			Session session=conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
			//5.创建Destination
			Destination destination=session.createQueue(QUEUE_NAME);
			//6.创建MessageConsumer对象
			MessageConsumer consumer=session.createConsumer(destination);
			//7.创建MessageListener
			consumer.setMessageListener(new MessageListener() {
				//8.接收消息
				public void onMessage(Message message) {
					TextMessage textMessage=(TextMessage) message;
					try {
						System.out.println("接收消息:"+textMessage.getText());
					} catch (JMSException e) {
						e.printStackTrace();
					}
				}
			});
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			//9.关闭连接
			//注意:接收消息是一个异步过程
			if(conn!=null){
				//conn.close();
			}
		}
	}
}

4.启动消费者(启动两个消费者便于观察)和生产者

生产者发送的消息:


消费者1接收到的消息:


消费者2接收到的消息:


5.查看ActiveMQ控制台http://127.0.0.1:8161/admin/queueConsumers.jsp?JMSDestination=queue_test

可以看到两个客户端各接收5条消息

6.修改生产者:

for(int i=0;i<9;i++){
				//7.创建消息
				TextMessage message=session.createTextMessage("test11"+i);
				//8.发送消息
				producer.send(message);
				System.out.println("发送消息:"+message.getText());
			}

生产者再发送9条消息,观察2个消费者接收到的消息有何不同

生产者又发送的消息:


消费者1接收到消息:

消费者2接收到的消息:

此时,发现消费者1又接收到5条消息,消费者2又接收到4条消息,这也符合队列模式的特点:队列中的消息只能被一个消费者消费,消费者可以随时消费队列中的消息。







版权声明:本文为qq_20788055原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_20788055/article/details/80638492

智能推荐

Android VIEW简单绘图

画布canvas 提供两个构造函数: Canvas():创建一个空的Canvas对象 Canvas(Bitmap bitmap):创建一个以bitmap位图为背景的Canvas 常用的Canvas方法: void drawBitmap(Bitmap bitmap,float left,float top,Paint paint):在指定坐标绘制位图 void drawLine(float star...

数据去重的各种方法汇总(三)

Pandas去重DataFrame 接上篇,这篇就剩最后的用Pandas对DataFrame里面的数据去重,这里也有两种方法,可以直接看官方文档(但是掌柜觉得其实就是一种方法,因为第一种只是显示哪些重复。。。): 使用duplicated方法,它会返回一个布尔向量,其长度为行数,表示行是否重复,但是并不会删除重复数据。来看实例: 然后会得到这样一个表格: 现在使用duplicated方法: 会得到...

Linux环境下RabbitMQ消息队列的安装和配置

一、什么是RabbitMQ? RabbitMQ就是一个在AMQP基础上实现的企业级消息系统,简单的说,就是一个消息队列系统。具体的介绍,可以网上去搜!目前只介绍RabbitMQ在Linux系统的安装。 二、RabbitMQ的安装 1、 RabbitMQ是基于Erlang开发,所以使用之前必须安装Erlang语言开发包。 wget http://www.erlang.org/download/otp...

train_test_split切分数据集工具

顾名思义,这是一个切分训练集与测试集的工具   如果我们不使用,而是手动进行划分,要么进行简单的操作——划去前80%为训练集,后20%为测试集,这样会带来很多的问题,因为这样做,我们切出来的会让训练集和测试集的分布很不一致,我们可以看一下简单粗暴方法切出来的分布图: 红色的训练集,蓝色是测试集(点击图片放大可以看得很清楚,直接看博客好像图片模糊)   然...

shell编程第一节 和shell

shell编程看的博客感觉写的挺好的:http://www.cnblogs.com/dongying/p/6262935.html 以及  https://www.cnblogs.com/clsn/p/8028337.html#auto_id_0 简单总结:shell编程就是对一堆Linux命令的逻辑化处理。 chmod +x hello_world.sh ./hello_world.s...

猜你喜欢

微信开发:js sdk 分享(java)

今天记录一下微信jssdk 的分享给朋友的功能,获取config接口注入。 1.需要绑定域名(注意:设置js安全域名的时候,需要设置微信ip白名单,ip白名单新出来的,非白名单内的ip无法获取access_token 更无法获取jsapi) 在设置js 安全域名在 设置–>公众号设置–>功能设置里边 appid appSercret 在开发–>...

js--HTML美术馆

前言 因为之前库房合作的时候交给我一个任务,就是在点击某一项物品的时候显示出几张相印的小图片,然后点击小图片之后显示出一张大图片,因为当时还没有接触JavaScript,所以这方面的知识不是很了解,一直拖着,大概有两天吧,是在是解决不了,于是将这个任务交给了老付和建华,今天在学习JavaScript的时候突然之后就看到了有这么一项功能,于是就有感而发。 内容 首先向大家展示代码。 这部分是HTML...

Jenkins持续集成环境部署(入门篇)

为什么要持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。 价值: 1、减少风险 一天中进行多次的集成,并做了相应的测试,有利于检查缺陷,了解软件的健康状况,减少假定。 2、减少重复过程 节省时间、费用和工作量,通过自动化的持...

linux 下rabbitmq的安装以及设置远程用户访问

安装过程中会有提示,一路输入“y”即可。 完成后安装RabbitMQ: 3.自己建个文件夹 进行下载安装也可  直接执行也可 先下载rpm: 完成后启动服务: 可以查看服务状态: 这里可以看到log文件的位置,转到文件位置,打开文件: 这里显示的是没有找到配置文件,我们可以自己创建这个文件 编辑内容如下: 这里的意思是开放使用,rabbitmq默认创建的用户gue...

Java工程师成长修炼手册:01--Java基础特性和字符串

一.三大特性 1.封装 封装,把对象的属性封装起来(使用private修饰符),不被外部程序直接随意调用或修改成员变量。只能通过对象使用public修饰符的set 和 get 方法,来设置和获取成员变量的值。也可以把只在本类内部使用的方法使用 private。另外,还可以封装,隐藏一些方法,需要用的时候,就调用这些方法。这些就是封装。 封装的优点 良好的封装能够减少耦合,可以独立地开发、优化和修改...