- 浏览: 1591771 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/guozhanxian/archive/2007/01/21/1489309.aspx
配置JNDI
import java.util.Hashtable; |
理解示例类 如果你编写过JMS应用程序,就很容易理解JNDIUtil 和 Tester示例类(从http://assets.devx.com/sourcecode/WebSphereMQ_JMSSource&Classes.zip下载Java源文件和编译好的类),你创建的JMS管理对象隐藏了所有厂家专利实现。 JNDIUtil类 JNDIUtil包括使用名字通过JNDI查找检索对象的方法,参考清单1,你可以使用这个类中的方法检索你在MQ管理器中定义的JMS对象的引用情况。 清单1 JNDIUtil.java package devx.articles.mqjms; // JMS 类 import javax.jms.JMSException; import javax.jms.Queue; import javax.jms.QueueConnectionFactory; // JNDI 类 import javax.naming.InitialContext; import javax.naming.Context; import javax.naming.NamingException; // 标准 Java类 import java.util.Hashtable; /** * * A wrapper class for JNDI calls * */ public class JNDIUtil { private Context context; public JNDIUtil(String icf, String url) throws JMSException, NamingException { Hashtable environment = new Hashtable(); environment.put(Context.INITIAL_CONTEXT_FACTORY, icf ); environment.put(Context.PROVIDER_URL, url); context= new InitialContext( environment ); } /** * * @param ObjName Object Name to be retrieved * @return Retrieved Object * @throws NamingException */ private Object getObjectByName(String ObjName) throws NamingException { return context.lookup( ObjName ); } /** * A convenience method that returns QueueConnectionFactory objects (no casting required) * @param factoryName QueueConnectionFactory JNDI name * @return QueueConnectionFactory object * @throws NamingException */ public QueueConnectionFactory getQueueConnectionFactory(String factoryName) throws NamingException { return (QueueConnectionFactory) getObjectByName(factoryName); } /** * A convenience method that returns Queue objects (no casting required) * @param queueName * @return * @throws NamingException */ public Queue getQueue(String queueName) throws NamingException { return (Queue) getObjectByName(queueName); } } Tester类 Tester类向OUT.QUEUE中写入消息,从IN.QUEUE中读取消息。参考清单2. 清单2 Tester.java package devx.articles.mqjms; //JMS 类 import javax.jms.Queue; import javax.jms.QueueSession; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.JMSException; import javax.jms.Session; import javax.jms.QueueSender; import javax.jms.QueueReceiver; import javax.jms.TextMessage; import javax.jms.Message; //JNDI 类 import javax.naming.NamingException; //标准 Java 类 /** * * A class to test JMS with IBM MQ * */ public class Tester { public static String icf = "com.sun.jndi.fscontext.RefFSContextFactory"; public static String url = "file:/C:/JNDI-Directory"; public static void main(String[] vars) throws JMSException, NamingException { QueueSession session = null; QueueConnection connection = null; QueueConnectionFactory factory = null; QueueSender queueSender = null; QueueReceiver queueReceiver= null; Queue oQueue = null; // 消息发送到的队列 Queue iQueue = null; // 接收消息的队列 try { JNDIUtil jndiUtil= new JNDIUtil(icf,url); factory= jndiUtil.getQueueConnectionFactory("TestQM_QCF"); connection = factory.createQueueConnection(); // 启动(或重新启动)入站消息的连接地址,如果没有这个调用消息不会被接收 connection.start(); //表示一个非相互操作会话 boolean transacted = false; session = connection.createQueueSession( transacted, Session.AUTO_ACKNOWLEDGE); oQueue= jndiUtil.getQueue("OutputTestQueue"); queueSender = session.createSender(oQueue); TextMessage oMsg = session.createTextMessage(); oMsg.setText("www.devx.com"); // 你还可以设置其他消息属性 queueSender.send(oMsg); iQueue= jndiUtil.getQueue("InputTestQueue"); queueReceiver = session.createReceiver(iQueue); Message iMsg = queueReceiver.receive(1000); if ( iMsg != null ) System.out.println( ((TextMessage)iMsg).getText() ); else System.out.println( "No messages in queue " ); } finally { //总是释放资源 if ( queueReceiver!= null ) queueReceiver.close(); if ( queueSender!= null ) queueSender.close(); if ( session!= null ) session.close(); if ( connection!= null ) { connection.close(); } } } } 开始点是连接工厂查找,这个工厂用于创建一个连接: factory= jndiUtil.getQueueConnectionFactory("TestQM_QCF"); connection = factory.createQueueConnection(); 连接对象用于创建一个会话: session = connection.createQueueSession( transacted, Session.AUTO_ACKNOWLEDGE); 要将消息写入IN.QUEUE queue,查找前面创建的目的地对象OutputTestQueue: oQueue= jndiUtil.getQueue("OutputTestQueue"); 最后创建一个QueueSender对象将消息写入队列: queueSender = session.createSender(oQueue); 从OUT.QUEUE读取消息的过程相同,但使用的是QueueReceiver。 当你安装WMQ时会自动将编译和运行示例类需要的jar文件添加到CLASSPATH环境变量中,需要的jar文件位于C:\Program Files\IBM\WebSphere MQ\Java\lib,包括JMS和JNDI需要的jar。 在运行Tester类之前,使用MQ管理器向IN.QUEUE增加一条测试消息: 1.在 IN.QUEUE上点击右键,选择放入测试消息。 2.输入任意文本,点击放入消息。 如果你还没有在IN.QUEUE队列中放入过消息,Tester类会显示“队列中无消息”。 要运行Tester类,将Tester.class 和 JNDIUtil.class添加到CLASSPATH,然后在命令提示符输入: java devx.articles.mqjms.Tester 应用程序向OUT.QUEUE写入一条消息,并显示从IN.QUEUE检索到的消息,要检查发送到OUT.QUEUE中的消息,进入MQ管理器,在OUT.QUEUE上点击右键?选择“浏览消息”即可。 企业中的Java和WMQ MOM 在大型企业环境下,可以充分利用WMQ的性能和稳定性优势,只要你的代码遵循Java标准接口,你就可以受益。 本篇文章来源于:开发学院 http://edu.codepub.com 原文链接:http://edu.codepub.com/2009/0419/3122_2.php |
这个是自己写的
所使用jar包为:ibmmq.jar,com.ibm.mq.jar,jms.jar,com.ibm.mq_jms.jar
package com.learn.mq; import com.ibm.mq.jms.*; } //消息监听器 //异常监听器,需要有消息监听器一同运行,它将会发送MyExceptionListener对象到onMessage中 //此处可放入更多逻辑 |
发表评论
-
Java SE7新特性之二进制字面量
2016-12-14 22:53 831Java SE 7中, 整数类型(byte, shor ... -
浮点数为什么不精确?为什么银行的金额不能用浮点数计算
2016-12-14 22:52 2028浮点数为什么不精确? 其实这句话本身就不精确, 相对精确一 ... -
计算机是如何计算乘法除法的(实际上都是转换为二进制加法计算)
2016-12-14 22:46 6634http://blog.csdn.net/blues1021 ... -
什么是补码、反码、负数在计算中如何表示
2016-12-14 22:39 924负数在计算机中如何表 ... -
Math.abs()绝对值取到的数不一定是正数
2016-12-14 22:37 1271Math.abs() 注释:Note that if th ... -
用BigInteger实现大素数生成算法
2016-12-06 16:42 1875转自:http://www.cnblogs.co ... -
加密(AES)、公私钥(PKI)、摘要(DIGEST)、签名(SIGNATURE)、证书(CERT)的形象解释和组合用法
2016-09-15 18:19 94231.鲍勃有两把钥匙,一把是公钥,另一把是私钥。 ... -
RSA加密公私钥生成工具(openssl)
2016-09-15 13:00 1197https://www.openssl.org/source/ ... -
RPC原理详解
2016-06-23 20:47 582RPC 功能目标 RPC 的主要功能目标是让构建分布式计算 ... -
Java并发之CountDownLatch、CyclicBarrier和Semaphore
2016-06-23 20:36 1417这次说一下 JUC 中的同步器三个主要的成员:CountDo ... -
线程间协作的两种方式:wait、notify、notifyAll和Condition
2016-06-23 20:35 580在前面我们将了很多关于同步的问题,然而在现实中,需要线程之 ... -
The final local variable xxx cannot be assigned, since it is defined in an enclo
2016-04-24 17:42 1601本文就自己编程时候遇到的一个问题,简要描述一下,并提出解决 ... -
一个奇葩的excel中无法trim的“空格”的问题
2016-03-29 16:21 1944太奇怪了。打印出来的命名是空格,就是 trim() 不管用。 ... -
List深度复制
2016-02-17 09:34 2688昨天弄了一个类似List<Map<String, ... -
Eclipse导入 jar 源码乱码问题
2015-12-15 19:43 882http://blog.csdn.net/laiwenqian ... -
Java高并发编程的各种陷阱
2015-07-25 17:49 1009www.iteye.com/blogs/subjects/ja ... -
ASM介绍(java字节码操作利器)
2015-06-10 20:46 4371转自:http://www.ibm.com/de ... -
JDK 7 中的 Fork/Join 模式(并发处理)
2015-06-03 19:47 1015转自:http://www.ibm.com/dev ... -
Java常见内存溢出异常分析
2015-06-03 16:36 833转自:http://www.iteye.com/news/3 ... -
dom4j解析带有命名空间的xml
2015-04-09 21:23 5541Element rootEle = resultDoc.g ...
相关推荐
JMS定义了几种消息类型,包括: - **TextMessage**:用于纯文本消息。 - **ObjectMessage**:用于序列化的Java对象。 - **MapMessage**:用于键值对形式的数据。 - **BytesMessage**:用于字节流数据。 - **...
IBM MQ(原名WebSphere MQ)是IBM提供的一款企业级的消息中间件,它允许应用程序通过安全、可靠的方式交换数据。而IBM Websphere是IBM的一个全面的企业应用服务器平台,支持JMS(Java Messaging Service),可以与...
Java MQ,全称为Java消息队列,是一种中间件技术,用于在分布式系统中传递消息,以解耦应用程序组件,提高系统的可扩展性和可靠性。在Java领域,Apache ActiveMQ是广泛应用的开源MQ实现之一,它提供了丰富的特性集和...
JMS API包括了几个关键接口和类,如ConnectionFactory、Connection、Session、Destination、MessageProducer、MessageConsumer等。ConnectionFactory用于创建连接,Connection代表与消息代理的会话,Session是线程...
6. **JMS模板的配置**:Spring的配置文件中,可以通过`<bean>`标签来配置`JmsTemplate`,设置连接工厂、目的地等属性,使其能与实际的JMS提供者(如ActiveMQ、IBM WebSphere MQ等)对接。 7. **消息驱动的POJO(MDP...
消息提供者是实现JMS规范的中间件,如IBM WebSphere MQ、Apache ActiveMQ、RabbitMQ等。这些中间件提供了消息的存储和传递功能。消息消费者则是使用JMS API来发送和接收消息的应用程序。 学习JMS时,我们需要掌握...
- **JMS**(Java Message Service):一种Java平台的消息中间件标准,提供了一组API来定义消息的生产和消费。 - **AMQP**(Advanced Message Queuing Protocol):一种开放的、标准化的消息中间件协议,支持多语言...
在IT行业中,消息队列(Message Queue,简称MQ)是一种重要的中间件技术,它用于解耦应用程序的不同组件,使得它们可以异步通信。JMS(Java Message Service)是Java平台中用于与消息传递系统交互的标准API,而...
Spring是Java领域的一个核心框架,提供了一种模块化和松耦合的方式来构建应用程序。Spring框架的核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)。在集成MQ时...
Spring与JMS的整合使得开发者能够方便地在Spring应用中使用JMS,通过声明式的方式配置消息生产者和消费者,降低了复杂性。 将JMS、ActiveMQ和Spring整合,首先需要在Spring配置文件中定义ConnectionFactory,这是与...
JMS是Java 2企业版(J2EE)规范的一部分,确保了跨不同MQ服务器提供商的互操作性,就像JDBC提供了与各种数据库的兼容性一样。JMS支持两种消息模型:点对点(Point-to-Point, PTP)和发布/订阅(Publish/Subscribe, ...
标题中的“集成Websphere Application Server 和Active MQ”意味着我们将探讨如何将IBM的Websphere Application Server(WAS)与Apache ActiveMQ结合使用,以实现企业级的消息传递和队列管理功能。Websphere ...
JMS定义了几种不同类型的消息,如文本消息(TextMessage)、对象消息(ObjectMessage)等。 #### 五、总结 Java消息服务(JMS)作为一种标准的消息传递API,为开发人员提供了强大的工具集来构建复杂的分布式系统。通过...
在实际开发中,JMS通常与其他技术结合使用,如Spring框架中的Spring JMS模块,提供对JMS的简化操作,使得在Java应用中使用JMS变得更加便捷。此外,JMS还可以配合EJB(Enterprise JavaBeans)、JTA(Java Transaction...
9. **点对点与发布/订阅模型**:JMS提供了两种通信模型,点对点模型基于消息队列,发布/订阅模型基于主题。 10. **消息选择器**:消费者可以使用消息选择器过滤接收到的消息,只处理符合特定条件的消息。 通过阅读...
常见的MQ类型主要有以下几种: 1. **有Broker的MQ**:这类MQ有一个中心服务器作为Broker,负责转发消息。例如Kafka和JMS(ActiveMQ)。生产者将消息发送给Broker,Broker根据消息的key决定将消息推送给哪个消费者。...
在分布式系统中,消息队列(Message Queue, MQ)扮演着重要的角色,它是一种异步通信机制,能够有效地解耦应用程序,提高系统的可扩展性和容错性。消息队列允许生产者将消息发送到队列,然后由消费者在适合的时候...
6. **事务管理**:Spring还支持与JMS操作结合的事务管理,可以确保消息的原子性,即在事务成功提交时发送消息,否则回滚。 7. **消息确认**:Spring允许配置不同的确认模式,例如自动确认、客户端确认或DUPS_OK确认...
9. Java与IBM MQ集成:JMS接口使用,编写Java应用程序进行消息收发。 10. 系统安全:防火墙配置、认证机制、加密技术,确保系统的安全运行。 11. 故障诊断与恢复:日志分析、故障排查流程、系统恢复策略。 12. 高...
为了进行这样的测试,开发者通常会使用JUnit或其他测试框架,结合Mockito等库来模拟JMS环境,或者直接在真实的JMS服务器上运行测试。此外,监控和日志记录也是测试过程中重要的辅助手段,它们可以帮助分析测试结果并...