- 浏览: 707792 次
- 性别:
- 来自: 北京
-
博客专栏
-
-
读金庸故事,品程序人生
浏览量:47875
文章分类
最新评论
-
hty881008:
LZ,你的json返回是怎么出来的,我的怎么是No messa ...
使用CXF暴露您的REST服务 -
jxFY:
赞
Apache的对象池化工具commons-pool -
wangyudong:
新版本的Wisdom RESTClient地址https:// ...
使用CXF暴露您的REST服务 -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
使用CXF暴露您的REST服务 -
spring_springdata:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Maven3实战笔记01环境配置与使用入门
1. 前言
基于JMS标准的消息中间件实现的产品有很多,JBossMQ、ActiveMQ、OpenMQ、OpenJMS等等,最常用的还是apache的ActiveMQ。有时也使用Sun的OpenMQ。在官网http://mq.java.net/处可以下载。Open Message Queue是Sun Java System Message Queue的一个开源版本。Open message queue是一个企业级,可升级,非常成熟的消息服务器。它为面向消息的系统集成提供一套完整的JMS(Java Message Service )实现。由于Open MQ源自Sun的Java Message Queue,所以其具有Java System Message Queue拥有的所有特性,功能和性能。
2. 环境配置
下载后将相关的jar拷贝到项目的classpath下面。笔者在此为了安全起见,引入了很多jar包,将语言包都引入了。各位读者可以因地制宜。
以下是引入jar包的列表
3. 之后项目加入Spring的相关jar包。lib/openmqjar/common-message.jar
lib/openmqjar/fscontext.jar
lib/openmqjar/grizzly.jar
lib/openmqjar/imq_de.jar
lib/openmqjar/imq_es.jar
lib/openmqjar/imq_fr.jar
lib/openmqjar/imq_it.jar
lib/openmqjar/imq_ja.jar
lib/openmqjar/imq_ko.jar
lib/openmqjar/imq_pt_BR.jar
lib/openmqjar/imq_zh_CN.jar
lib/openmqjar/imq_zh_TW.jar
lib/openmqjar/imq.jar
lib/openmqjar/imqadmin.jar
lib/openmqjar/imqbridgemgr.jar
lib/openmqjar/imqbroker.jar
lib/openmqjar/imqjmsbridge.jar
lib/openmqjar/imqjmsra.rar
lib/openmqjar/imqjmx_de.jar
lib/openmqjar/imqjmx_es.jar
lib/openmqjar/imqjmx_fr.jar
lib/openmqjar/imqjmx_it.jar
lib/openmqjar/imqjmx_ja.jar
lib/openmqjar/imqjmx_ko.jar
lib/openmqjar/imqjmx_pt_BR.jar
lib/openmqjar/imqjmx_zh_CN.jar
lib/openmqjar/imqjmx_zh_TW.jar
lib/openmqjar/imqjmx.jar
lib/openmqjar/imql10n_server_de.jar
lib/openmqjar/imql10n_server_es.jar
lib/openmqjar/imql10n_server_fr.jar
lib/openmqjar/imql10n_server_it.jar
lib/openmqjar/imql10n_server_ja.jar
lib/openmqjar/imql10n_server_ko.jar
lib/openmqjar/imql10n_server_pt_BR.jar
lib/openmqjar/imql10n_server_zh_CN.jar
lib/openmqjar/imql10n_server_zh_TW.jar
lib/openmqjar/imqservlet.jar
lib/openmqjar/imqstomp.jar
lib/openmqjar/imqutil.jar
lib/openmqjar/imqxm.jar
lib/openmqjar/jaxm-api.jar
lib/openmqjar/jhall.jar
lib/openmqjar/jms.jar
lib/openmqjar/jta.jar
lib/openmqjar/protobuf-2.3.0.jar
增加Spring配置文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd" default-autowire="byName"> <!--消息连接工厂--> <bean id="connectionfactoryfactory" class="message.listener.OpenMqConnectionFactory"> <property name="properties"> <props> <prop key="imqAddressList">127.0.0.1:7676</prop> <prop key="imqDefaultUsername">admin</prop> <prop key="imqDefaultPassword">admin</prop> <prop key="imqReconnectEnabled">true</prop> <prop key="imqReconnectAttempts">3</prop> <prop key="imqReconnectInterval">5000</prop> <prop key="imqAddressListBehavior">RANDOM</prop> </props> </property> </bean> <bean id="mqConnectionFactory" factory-bean="connectionfactoryfactory" factory-method="createConnectionFactory" /> <!--设置广发消息目的--> <bean id="updateLocalRouteMap" class="com.sun.messaging.Topic"> <constructor-arg type="java.lang.String" value="mytopic" /> </bean> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="mqConnectionFactory" /> <property name="defaultDestination" ref="updateLocalRouteMap" /> <property name="receiveTimeout" value="20000" /> </bean> <!--消息监听器--> <bean id="messageListener1" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <constructor-arg> <bean class="message.listener.JMSMessageListener" /> </constructor-arg> <property name="defaultListenerMethod" value="receive" /> <property name="messageConverter"> <null /> </property> </bean> <!—实际的消息监消费者配置--> <bean id="consumercontainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="mqConnectionFactory" /> <property name="destination" ref="updateLocalRouteMap" /> <property name="messageListener" ref="messageListener1" /> <property name="transactionTimeout" value="180000" /> <property name="receiveTimeout" value="180000" /> <property name="sessionTransacted" value="true" /> </bean> </beans>
4. 消息监听器
类代码如下
/** * JMS消息消费者。 * 接收JMS消息后获得router想要的消息后,调用router接口更新本地缓存 * @author liuyan * */ public class JMSMessageListener implements MessageListener { private Logger log = Logger.getLogger(JMSMessageListener.class.getName()); /** * 接收JMS消息后的业务处理 */ public void onMessage(Message message) { log.info("接收消息……"); byte[] byteMessage = JMSByteConverterUtil .ConverterMessageToBttes(message); try { log.info("将转型成实体对象……"); //…………………………………………………… } } catch (InvalidProtocolBufferException e) { log.error("JMS异常" + e.getMessage()); e.printStackTrace(); } catch (Exception e) { log.error("其他异常" + e.getMessage()); e.printStackTrace(); } } }
因为一些原因此处就不给出完整代码了~~~反正是获取一个字节流后,转成对象,直接从对象中获取想要的信息。转成对象的辅助类如下
/** * 对获得的消息对象进行转型 * @author liuyan */ public class JMSByteConverterUtil { private static Logger log = Logger.getLogger(JMSMessageListener.class .getName()); /** * 对获得的消息对象进行转型 * @param message * @return */ public static byte[] ConverterMessageToBttes(Message message) { if (message == null) { log.error("消息对象为空……"); return null; } else if (message instanceof BytesMessage) { log.debug("消息强制转型BytesMessage"); BytesMessage bytesMessage = (BytesMessage) message; byte[] messageBytes; try { log.debug("建立空的消息二进制数组"); messageBytes = new byte[(int) bytesMessage.getBodyLength()]; log.debug("往二进制数组中写进二进制信息"); bytesMessage.readBytes(messageBytes); log.debug("messageBytes.length=" + messageBytes.length); return messageBytes; } catch (JMSException e) { log.error("JMS错误:" + e.getMessage()); e.printStackTrace(); return null; } }else{ log.error("消息对象不能正确转型"); return null; } } }
5. 启动消息监听器
开启OpenMQ的服务,启动{OpenMQ_HOME}\mq\bin\下的imqcmd.exe命令
启动消息消费者很简单,代码如下
public class MessageConsumer { /** * @param args */ public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext( new String[] { "classpath:/spring/applicationContext-openmq-jms.xml" }); System.out.println(applicationContext.getId()); } }
6. 消息发送者
启动消息消费者服务后,写一个测试类测试一下消息的,代码如下
public class MessageSender { /** * @param args * @throws JMSException */ public static void main(String[] args) throws JMSException { ConnectionFactory myConnFactory; myConnFactory = new com.sun.messaging.ConnectionFactory(); myConnFactory.setProperty(ConnectionConfiguration.imqAddressList, "mq://127.0.0.1:7676"); myConnFactory.setProperty(ConnectionConfiguration.imqReconnectEnabled, "true"); Connection myConn = myConnFactory.createConnection(); myConn.start(); // Step 4: // Create a session within the connection. Session mySess = myConn.createSession(false, Session.AUTO_ACKNOWLEDGE); Topic myTopic = new com.sun.messaging.Topic("testmq");// .Queue("testmq"); MessageProducer myMsgProducer = mySess.createProducer(myTopic); ObjectMessage objectMessage = mySess.createObjectMessage(); RouterMessageBean routerMessageBean = new RouterMessageBean(); routerMessageBean.setDbName("mysql-test"); routerMessageBean.setUserName("liuyan"); routerMessageBean.setMaster(null); routerMessageBean.setSlave(null); objectMessage.setObject(routerMessageBean); BytesMessage bytesMessage = mySess.createBytesMessage(); bytesMessage.writeUTF("the message is 消息内容!"); myMsgProducer.send(bytesMessage); System.out.println("测试发送JMS消息"); mySess.close(); myConn.close(); } }
发表评论
-
Web应用单点压力测试调优-第6季-阶段性总结
2014-03-14 12:24 3473阶段性总结 <! ... -
Web应用单点压力测试调优-第5季
2014-03-13 09:32 4197各项配置: my.cnf [clien ... -
Web应用单点压力测试调优-第4季
2014-03-12 14:55 3222调整5-Tomcat的启动JVM参数 首先先启动 ... -
单点网站压力测试调优-第3季
2014-03-11 16:21 3491调整2-调整配置,数据库连接池数量 mysql ... -
Web应用单点压力测试调优-第2季
2014-03-07 16:52 8957并发1000,准备时间1s,让它产生大量的等待请求 ... -
单点网站压力测试调优-第1季
2014-03-07 10:36 4019环境介绍 虚拟机配置 ... -
编程质量提高建议总结1(持续总结)
2014-03-05 19:42 1342编程质量提高建议总结1(持续总结) 1.混淆字母要明显 ... -
关于博客文章内容显示不全的问题
2011-06-14 09:36 2479关于博客文章内容显示不全的问题,我发现有些文章显示内容不全。 ... -
Maven3实战笔记05仓库依赖解析与插件解析
2011-06-07 09:00 34461. Maven仓库依赖解析机 ... -
Apache的对象池化工具commons-pool
2011-05-16 09:21 131671. 前言 当我们的应用中创建一个十分最重量级的 ... -
要不要池化是个艰难的选择(转)-我觉得很生动就转载了下来
2011-05-05 09:50 1583转自http://www.ixpub.net/thre ... -
java.lang.IllegalStateException: STREAM错误的理解(转)
2011-05-04 18:09 13831转自http://dimple.iteye.com/blog/ ... -
Spring3配置声明式事务
2011-05-02 16:52 45641. 配置Spring3声明式事务 在Sprin ... -
Java基础复习笔记11基本排序算法
2011-04-25 13:20 21651. 排序 排序是一个历来都是很多算法家热衷的领 ... -
Java基础复习笔记08数据结构-二叉树和二叉树的遍历
2011-04-22 09:10 25851. 二叉树 一 ... -
Java基础复习笔记07数据结构-树的概述
2011-04-19 17:35 19801. 树的概念 如果线性表、栈、队列是线性结构( ... -
Java基础复习笔记06数据结构-队列
2011-04-19 17:25 17291. 队列 队列又是一种比较特殊的线性表,和栈一 ... -
Java基础复习笔记04数据结构-线性表
2011-04-15 14:14 23371. 线性表 线性表是数据结构的一种逻辑结构,其 ... -
Java基础复习笔记03面试、笔试、开发中我们不太注意的陷阱之流程控制、面向对象、异常处理
2011-04-13 09:59 22361. switch语句的用法 有人说:“笔者基础 ... -
Java基础复习笔记03面试、笔试、开发中我们不太注意的陷阱之多线程
2011-04-13 09:51 19911. 什么样的对 ...
相关推荐
结合Spring注释使用的简单API 提供丰富的监控指标 参加OpenTracing 事务消息 消费者的处理能力也可以方便扩容缩容 服务器可以随心所欲扩容缩容 Java客户端,.NET客户端 读写分离 消息投递轨迹 历史消息的自动备份 ...
T型三电平+SVPWM的下垂控制与双闭环中点电位平衡控制.pdf
STM32真实企业级项目:锅炉控制器源码、原理图与PCB图.pdf
STM32F103 Modbus主站源码:正常使役,支持多从机功能码通信及从机寄存器写入.pdf
Simulink永磁同步直驱风机PMSG一次调频离散模型:含虚拟惯性与下垂控制,可扩展至光伏储能研究.pdf
VSG仿真、并网与离网运行仿真、预同期并网控制及虚拟同步机逆变器仿真.pdf
VIC水文模型全程视频教学指导.pdf
vrep_coppeliasim+matlab机器人轨迹控制仿真:利用matlab读取轨迹并控制机械臂在墙上绘图的详细学习示例.pdf
2000-2022年上市公司行业异质性数据(技术密集型、劳动密集型、资本密集型)(含原始数据和处理代码) 1、时间:2000-2022年 2、指标:股票代码、年份、股票简称、统计日期、行业名称、行业代码、成立日期、上市日期、所在省份、所在城市、上市状态、保留两位行业代码、保留一位行业代码、高科技为1,非高科技为0、重污染为1,非重污染为0、制造业为1,非制造业为0、劳动密集型为1,资本密集型为2,技术密集型为3 3、来源:csmar 4、根据2012年中国证监会行业划分是否高科技、是否重污染、是否制造业、是否劳动密集型、资本密集型、技术密集型。 5、内容:包括原始数据、处理代码和计算结果
TMS320F28335电机控制程序:BLDC、PMSM无感有感及异步VF程序源代码与开发资料大全.pdf
tc275、s12x、s32k144基于CANoe的UDS诊断数据库CDD文件及CAPL Boot上位机、下位机程序移植说明文档.pdf
STM32系列通信透传技术:以太网、串口、CAN透传及OBD协议解析.pdf
STM32开发:IIR带阻滤波器设计与实现.pdf
UG后处理:CNC西门子828D后处理与西门子后处理工厂实战自用.pdf
MYSQL深入学习总结.pdf
Stewart六自由度平台反解算法 C#.pdf
1、文件说明: Centos8操作系统vim-ale-3.3.0-1.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf vim-ale-3.3.0-1.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
tc275、s12x和s32k144的Boot程序及UDS故障诊断与Bootloader移植的Python自制上位机源码.pdf
SSA-CNN-LSTM时间序列预测(Matlab)_ 麻雀算法优化卷积长短期记忆网络.pdf