文档章节

干货!Java消息队列

 蔡晓柏
发布于 2017/01/20 13:14
字数 551
阅读 226
收藏 1

JMS

JAVA Message Servive,java应用程序之间进行消息交换,并提供标准的生产,发送,接受的简化接口。 支持点对点(生产-消费),发布/订阅类型,请求应答模式。 JMS启动流程

1.获得JMS connection factory. 通过我们提供特定环境的连接信息来构造factory。 2.利用factory构造JMS connection。 3.启动connection。 4.通过connection创建JMS session。 5.指定JMS destination。 6.创建JMS producer或者创建JMS message并提供destination。 7.创建JMS consumer或注册JMS message listener。 8.发送和接收JMS message。 9.关闭所有JMS资源,包括connection, session, producer, consumer等。 启动:在包下找到对应的activeMq.bat启动服务,登陆后台 http://localhost:8161/admin ,执行相关的代码

简单的生产消费模式:(spring配置)

一、配置activeMq的服务地址

<!-- 配置connectionFactory,真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 --> <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <!-- 指定连接到本地vm的代理(vm是broker启动的代理) --> <!-- <property name="brokerURL" value="vm://localhost" /> --> <!-- <property name="brokerURL" value="tcp://localhost:61616" /> --> <property name="brokerURL" value="${broker.tcp.url}" /> <property name="userName" value="${broker.username}" /> <property name="password" value="${broker.password}" />`` <!-- <property name="maxConnections" value="100"></property> --> </bean>

二、配置activeMq的发送器</br>

<采用TCP长连接方式,避免每次建立短连接需要的额外工作时间>

<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop" scope="singleton"> <constructor-arg ref="connectionFactory"></constructor-arg> </bean> <跨多个监听容器共享同一个JMS连接,Spring用于管理真正的ConnectionFactory的ConnectionFactory>

<bean id="singleConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory" ref="pooledConnectionFactory" /> </bean> <声明ActiveMQ消息目标,目标可以是一个队列,也可以是一个主题ActiveMQTopic>

<bean id="defaultQueue" class="org.apache.activemq.command.ActiveMQQueue"> <!-- 设置消息队列的名字 --> <constructor-arg index="0" value="default.queue" /> </bean> <Spring提供的JMS工具类,可以进行消息发送、接收等>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="singleConnectionFactory" /> <property name="receiveTimeout" value="${receive.timeout}" /> <property name="defaultDestinationName" value="default.queue" /> <property name="sessionTransacted" value="true"></property> </bean> 三、配置activeMq的接收器</br>

<配置消息监听容器,消息消费方自动接收消息>

<bean id="defaultQueueJmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="singleConnectionFactory" /> <property name="destination" ref="defaultQueue" /> <property name="messageListener" ref="defaultQueueConsumer" /> </bean> <消息监听器> <bean id="defaultQueueConsumer" class="com.selfpackage.message.listener.GenericConsumer"> <constructor-arg value="_default" /> </bean>

简单的生产消费模式:(java代码)

一、发送类的实现

@Resource private JmsTemplate jmsTemplate;//注入jmsTempalte @Override public void sendMessage(Destination destination, final String message) throws JmsException { MessageCreator messageCreator = new MessageCreator() { public Message createMessage(Session session) throws JMSException { TextMessage msg = session.createTextMessage(message); return msg; } }; try { jmsTemplate.send(destination, messageCreator); } catch (JmsException e) { throw e; } }

@Resource(name = "defaultQueue") private Destination defaultQueue; @Auwised MessageService messageService String content; messageService.sendMessage(destination, content); 二、消息的接受

public class QueueMessageListener implements MessageListener { //当收到消息时,自动调用该方法。 public void onMessage(Message message) { TextMessage tm = (TextMessage) message; try { System.out.println("ConsumerMessageListener收到了文本消息:\t" + tm.getText()); } catch (JMSException e) { e.printStackTrace(); } }

© 著作权归作者所有

粉丝 0
博文 2
码字总数 1118
作品 0
广州
私信 提问
滴滴裁员2000,赔偿方案已出!程序员:我很开心!

上周,滴滴CEO程维宣布:正式做好过冬准备!整体裁员比例占到全员的15%,涉及2000人左右。 据了解20日补偿方案如下:补偿一般为N+1个月,如果本周能确认,再额外给一个月补偿——有滴滴员工证...

程序员小灰
02/28
0
0
Android ThreadLocal+PriorityQueue构建多线程队列

一、消息队列 Android中使用了很多消息队列,如Intent,Handler,BroadcastReceiver等。使用消息队列的目的是防止线程阻塞并且将不能及时执行的任务缓存起来,从而提高系统的运行效率。 为了使...

IamOkay
2014/11/03
1K
0
RabbitMQ入门(1)--介绍

前面声明本文都是RabbitMQ的官方指南翻译过来的,由于本人水平有限难免有翻译不当的地方,如发现不对的地方,请联系下我,好及时改正。好了,正文开始: RabbitMQ 是一个消息代理。这主要的原...

-悟空-
2015/02/24
23.9K
18
java使用哪种消息队列简单便捷?

java使用哪种消息队列简单便捷? 最近项目需要使用消息队列来实现消息发送,因为后期考虑到数据量大的问题,并且语言是java,请问有什么消息队列可以选择,java的话,使用哪种消息队列容易上...

潘深练GS
2015/08/22
622
3
Android Handler:全面,详细解读

有时我们需要在子线程中进行耗时的I/O操作,可能是读取文件或者访问网络等,当耗时操作完成后可能需要UI上做一些改变,由于android的开发规范限制,我们不能在子线程中访问UI控件,否则会触发...

zzqFive
2018/04/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部