文档章节

ActiveMQ生产者以同步和异步方式发送消息

骑着机车敲代码
 骑着机车敲代码
发布于 2016/09/06 11:26
字数 625
阅读 635
收藏 1

ActiveMQ支持生产者以同步或异步模式发送消息。使用不同的模式对send方法的反应时间有巨大的影响,反映时间是衡量ActiveMQ吞吐量的重要因素,使用异步发送可以提高系统的性能。

###生产者发送消息 在默认大多数情况 下,AcitveMQ是以异步模式发送消息。

例外的情况: 没有使用事务并且 生产者以PERSISTENT传送模式发送消息

在这种情况 下, send方法都是同步的,并且一直阻塞直到ActiveMQ发回确认消息:消息已经存储在持久性数据存储中。这种确认机制保证消息不会丢失,但会造成 生产者阻塞从而影响反应时间。

高性能的程序一般都能容忍在故障情况下丢失少量数据。如果编写这样的程序,可以通过使用异步发送来提高吞吐量(甚至在使用PERSISTENT传送模式的情况下)。

####同步发送消息

ConnectionFactory connectionFactory;    //连接工厂
Connection connection = null;  //连接
Session session;    //会话,接收或者发送消息的线程
Destination destination;    //消息的目的地
MessageProducer messageProducer;    //消息生产者
connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, brokerURL);
try {
	connection = connectionFactory.createConnection();
	connection.start(); //启动连接
        //重点:不使用事务
	session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
	destination = session.createQueue(QueueName);        //创建队列
	messageProducer = session.createProducer(destination);                //创建消息生产者
	messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
	sendMessage(session, messageProducer);
} catch (JMSException e) {
	e.printStackTrace();
} catch (Exception e) {
	e.printStackTrace();
}finally {
	if(connection != null){
		try {
			connection.close();
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
}

####异步发送消息

ConnectionFactory connectionFactory;    //连接工厂
Connection connection = null;  //连接
Session session;    //会话,接收或者发送消息的线程
Destination destination;    //消息的目的地
MessageProducer messageProducer;    //消息生产者
connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, brokerURL);
try {
	connection = connectionFactory.createConnection();
	connection.start(); //启动连接
        //重点:使用事务
	session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
	destination = session.createQueue(QueueName);        //创建队列
	messageProducer = session.createProducer(destination);                //创建消息生产者
	messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
	sendMessage(session, messageProducer);
         //重点:需要commit
	session.commit();
} catch (JMSException e) {
	e.printStackTrace();
} catch (Exception e) {
	e.printStackTrace();
}finally {
	if(connection != null){
		try {
			connection.close();
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
}

异步发送的方式不止以上一种,还有其他好几种,比如通过URL方式也可以,在url后追加 jms.useAsyncSend=true

private static final String brokerURL = "tcp://192.168.10.55:61616?jms.useAsyncSend=true";

© 著作权归作者所有

骑着机车敲代码
粉丝 16
博文 70
码字总数 31439
作品 0
杭州
程序员
私信 提问
加载中

评论(3)

yanjilin
yanjilin
不容易
骑着机车敲代码
骑着机车敲代码 博主

引用来自“JAMESLINCN”的评论

假期还不忘学习,很励志
我们只休息五天好么
yanjilin
yanjilin
假期还不忘学习,很励志
ActiveMQ结合Spring收发消息

原文出处:zylebron ActiveMQ 结合 Spring 收发消息 直接使用 ActiveMQ 的方式需要重复写很多代码,且不利于管理,Spring 提供了一种更加简便的方式————Spring JMS ,通过它可以更加方便...

zy_lebron
2018/10/09
0
0
初识ActiveMQ消息中间件

ActiveMQ官方网站:https://activemq.apache.org/ 关于ActiveMQ消息传递的方式详见: https://segmentfault.com/a/1190000014958916 https://www.cnblogs.com/cyfonly/p/6380860.html 本篇博......

帅得拖网速
05/12
33
0
分布式消息通信ActiveMQ原理-持久化策略-笔记

消息的持久化策略分析 消息持久性对于可靠消息传递来说是一种比较好的方法, 即时发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重启后仍然可以将消息发送出去...

Java搬砖工程师
2018/12/17
31
0
ActiveMQ的设置消息时长,事务,确认机制 ,持久化

1.消息事务 消息事务是在生产者producer到broker或broker到consumer过程中同一个session中发生的,保证几条消息在发送过程中的原子性。(Broker:消息队列核心,相当于一个控制中心,负责路由消...

watermelon11
02/15
48
0
ActiveMQ入门以及整合spring boot

一、 ActiveMQ 消息队列的使用 MQ MQ:Message Queue 消息队列,就是用来在系统之间进行消息传递的 这个队列有一系列具体的实现技术:ActiveMQ、rabbitMQ、kafka、RocketMQ(alibaba) HttpCil...

Armymans
2018/11/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Activity启动模式二

上篇文章Activity启动模式一主要介绍了Activity的四种启动模式,这些启动模式都是在AndroidManifest中进行配置的。除此之外,Android系统还通过Intent类提供了一些标志位,同样可以指定Activ...

ltlovezh
29分钟前
4
0
三原色还原

1、Color Filter Array — CFA 随着数码相机、手机的普及,CCD/CMOS 图像传感器近年来得到广泛的关注和应用。 图像传感器一般都采用一定的模式来采集图像数据,常用的有 BGR 模式和 CFA 模式...

天王盖地虎626
40分钟前
3
0
kubernetes pod exec接口调用

正文 一般生产环境上由于网络安全策略,大多数端口是不能为集群外部访问的。多个集群之间一般都是通过k8s的ApiServer组件提供的接口通信,如https://192.168.1.101:6443。所以在做云平台时,...

码农实战
今天
8
0
3_数组

3_数组

行者终成事
今天
8
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部