`
linkyou66
  • 浏览: 228591 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

ACTIVEMQ相关知识点

 
阅读更多
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">JMS</span></span><span style="">始终在</span><span lang="EN-US"><span style="font-family: Calibri;">JavaEE</span></span><span style="">五花八门的协议里,</span><span lang="EN-US"><span style="font-family: Calibri;">WebService</span></span><span style="">满天飞的时候占一位置,是因为:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="" lang="EN-US"></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="">它可以把不影响用户执行结果又比较耗时的任务(比如发邮件通知管理员)异步的扔给</span><span style="" lang="EN-US">JMS </span><span style="">服务端去做,而尽快的把屏幕返还给用户。</span><span style="" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="">服务端能够多线程排队响应高并发的请求。</span><span style="" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="">可以在</span><span style="" lang="EN-US">Java</span><span style="">世界里达到最高的解耦。客户端与服务端无需直连,甚至无需知晓对方是谁、在哪里、有多少人,只要对流过的信息作响应就行了,在企业应用环境复杂时作用明显。</span><span style=""> <span lang="EN-US"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Calibri;"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="" lang="EN-US">JMS(Java Message Service)</span><span style="">即</span><span style="" lang="EN-US"> java</span><span style="">消息服务</span><span style=""> </span><span style="">用于分布式系统得消息通信,</span><span style="" lang="EN-US">JMS</span><span style="">是</span><span style="" lang="EN-US">J2EE</span><span style="">技术中的一个部分,</span><span style="" lang="EN-US">Sun</span><span style="">公司定义了</span><span style="" lang="EN-US">JMS</span><span style="">的标准接口,即</span><span style="" lang="EN-US">javax.jms.*</span><span style="">。</span><span style="" lang="EN-US"><br><br>JMS</span><span style="">服务使得分布式系统的信息通信松散连接的,发送信息的客户端只需要负责发送信息,接收信息的客户端接收信息,两个客户端之间没有必要是同时可用的,甚至发送客户端都没有必要知道客户端的信息,只要负责发送到接收的服务端就可以,</span><span style="" lang="EN-US">JMS</span><span style="">可以说是低耦合的。</span><span style="" lang="EN-US"><br><br></span><span style="">同时</span><span style="" lang="EN-US">JMS API </span><span style="">做到了以下</span><span style="" lang="EN-US">2</span><span style="">点</span><span style="" lang="EN-US"><br></span><span style="">异步的,服务端可以发送信息到一个客户端,客户端不需要为了收到信息而请求信息。</span><span style="" lang="EN-US"><br><br></span><span style="">可靠的,</span><span style="" lang="EN-US">JMS API</span><span style="">保证了服务端所有发送的信息最少发送一次和只发送一次</span><span style="" lang="EN-US"><br><br></span><span style="">下面介绍一些</span><span style="" lang="EN-US">JMS API </span><span style="">的基本知识</span><span style="" lang="EN-US"><br><br>JMS API </span><span style="">基本组成</span><span style="" lang="EN-US"><br><br>    JMS provider</span><span style="">服务者,是一个消息系统通过实现</span><span style="" lang="EN-US">JMS API </span><span style="">接口,用于管理和控制信息。</span><span style="font-size: 9pt; color: black; font-family: Symbol;" lang="EN-US"><span style="">l</span></span><span style="" lang="EN-US"><br></span><span style="font-size: 9pt; color: black; font-family: Symbol;" lang="EN-US"><span style="">l</span></span><span style="" lang="EN-US">  JMS client </span><span style="">客户端</span><span style="" lang="EN-US"></span><span style="">用于发送和接收信息,通常是用在</span><span style="" lang="EN-US">java</span><span style="">程序中用</span><span style="" lang="EN-US">java</span><span style="">编写的</span><span style="" lang="EN-US"><br>    Messages</span><span style="font-size: 9pt; color: black; font-family: Symbol;" lang="EN-US"><span style="">l</span></span><span style="" lang="EN-US"> </span><span style="">用于在客户端信息通信的对象</span><span style="" lang="EN-US"><br>    Administered Objects </span><span style="">由</span><span style="" lang="EN-US">JMS</span><span style="font-size: 9pt; color: black; font-family: Symbol;" lang="EN-US"><span style="">l</span></span><span style="" lang="EN-US"> provider</span><span style="">为了</span><span style="" lang="EN-US">client</span><span style="">创建的对象,通常是</span><span style="" lang="EN-US">connectionFactory</span><span style="">和</span><span style="" lang="EN-US">destination<br><br>Messages </span><span style="">通信方式</span><span style="" lang="EN-US"><br>JMS</span><span style="">通信方式分为点对点通信,和发布</span><span style="" lang="EN-US">/</span><span style="">订阅方式</span><span style="" lang="EN-US"><br><br></span><span style="">点对点方式(</span><span style="" lang="EN-US">point-to-point</span><span style="">)</span><span style="" lang="EN-US"><br></span><span style="">点对点的消息发送方式主要建立在</span><span style="" lang="EN-US"> Message Queue,Sender,reciever</span><span style="">上,</span><span style="" lang="EN-US">Message Queue </span><span style="">存贮消息,</span><span style="" lang="EN-US">Sneder </span><span style="">发送消息,</span><span style="" lang="EN-US">receive</span><span style="">接收消息,</span><span style="" lang="EN-US"><br><br></span><span style="">具体的信息就是</span><span style="" lang="EN-US"> Sender Client</span><span style="">发送</span><span style="" lang="EN-US">Message </span><span style="">到</span><span style="" lang="EN-US">Queue ,</span><span style="">而</span><span style="" lang="EN-US"> receiver Cliernt </span><span style="">从</span><span style="" lang="EN-US">Queue</span><span style="">中接收消息和发送消息已接受到</span><span style="" lang="EN-US">Quere,</span><span style="">确认消息接收。</span><span style="" lang="EN-US"><br><br></span><span style="">在使用点对点方式时需要注意,</span><span style="" lang="EN-US"><br><br></span><span style="">一条消息只有一个接收端,消息发送客户端与接收客户端没有时间上的依赖,发送客户端可以在任何时刻发送信息到</span><span style="" lang="EN-US">Queue</span><span style="">,而不需要知道接收客户端是不是在运行</span><span style="" lang="EN-US"><br><br></span><span style="">发布</span><span style="" lang="EN-US">/</span><span style="">订阅</span><span style=""> </span><span style="">方式(</span><span style="" lang="EN-US">publish/subscriber Messaging</span><span style="">)</span><span style="" lang="EN-US"><br></span><span style="">发布</span><span style="" lang="EN-US">/</span><span style="">订阅方式用于多接收客户端的方式</span><span style="" lang="EN-US"><br></span><span style="">作为发布订阅的方式,可能存在多个接收客户端,并且接收端客户端与发送客户端存在时间上的依赖。一个接收端只能接收他创建以后发送客户端发送的信息。</span><span style="" lang="EN-US"><br><br></span><span style="">作为</span><span style="" lang="EN-US">subscriber ,</span><span style="">在接收消息时有两种方法,</span><span style="" lang="EN-US">destination</span><span style="">的</span><span style="" lang="EN-US">receive</span><span style="">方法,和实现</span><span style="" lang="EN-US">message listener </span><span style="">接口的</span><span style="" lang="EN-US">onMessage </span><span style="">方法。</span><span style="" lang="EN-US"><br><br></span><span style="">基础知识这里说的很少,具体的可以参照</span><span style="" lang="EN-US">java.sun.com.</span><span style="">的</span><span style="" lang="EN-US">JMS API </span><span style="">指南</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;"><span style=""> </span>ActiveMQ</span></span><span style="">的特性:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Calibri;"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="">完全支持</span><span style="" lang="EN-US">JMS1.1</span><span style="">和</span><span style="" lang="EN-US">J2EE 1.4</span><span style="">规范的</span><span style="" lang="EN-US"> JMS Provider</span><span style="">实现,也是</span><span style="" lang="EN-US">Apache Geronimo</span><span style="">默认的</span><span style="" lang="EN-US">JMS provider</span><span style="">。</span><span style="" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="" lang="EN-US">POJO withdout EJB Container</span><span style="">,不需要实现</span><span style="" lang="EN-US">EJB</span><span style="">繁琐复杂的</span><span style="" lang="EN-US">Message Bean</span><span style="">接口和配置。</span><span style="" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="" lang="EN-US">Spring Base</span><span style="">,可以使用</span><span style="" lang="EN-US">Spring</span><span style="">的各种特性如</span><span style="" lang="EN-US">IOC</span><span style="">、</span><span style="" lang="EN-US">AOP </span><span style="">。</span><span style="" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="" lang="EN-US">Effective</span><span style="">,基于</span><span style="" lang="EN-US">Jencks</span><span style="">的</span><span style="" lang="EN-US">JCA Container</span><span style="">实现</span><span style="" lang="EN-US"> pool connection</span><span style="">,</span><span style="" lang="EN-US">control transactions and manage security</span><span style="">。</span><span style="" lang="EN-US"><span style=""> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="">下面是它的特性列表</span><span style="" lang="EN-US"> (</span><span style="">详细的特性清单请参考</span><span style="" lang="EN-US"><a href="http://activemq.apache.org/features.html"><span style="color: black; text-decoration: none;">http://activemq.apache.org/features.html</span></a>)<br> 1.</span><span style="">多种语言和协议编写客户端</span><span style="" lang="EN-US"><br></span><span style="">语言</span><span style="" lang="EN-US">: Java, C, C++, C#, Ruby, Perl, Python, PHP <br></span><span style="">应用协议</span><span style="" lang="EN-US">: OpenWire,Stomp REST,WS Notification,XMPP,AMQP<br> 2.</span><span style="">完全支持</span><span style="" lang="EN-US">JMS1.1</span><span style="">和</span><span style="" lang="EN-US">J2EE 1.4</span><span style="">规范</span><span style="" lang="EN-US"> (</span><span style="">持久化</span><span style="" lang="EN-US">,XA</span><span style="">消息</span><span style="" lang="EN-US">,</span><span style="">事务</span><span style="" lang="EN-US">)<br> 3.</span><span style="">对</span><span style="" lang="EN-US">Spring</span><span style="">的支持</span><span style="" lang="EN-US">,ActiveMQ</span><span style="">可以很容得内嵌到使用</span><span style="" lang="EN-US">Spring</span><span style="">的系统里面去</span><span style="" lang="EN-US">,</span><span style="">而且也支持</span><span style="" lang="EN-US">Spring2.0</span><span style="">的特性</span><span style="" lang="EN-US"><br>4.</span><span style="">通过了常见</span><span style="" lang="EN-US">J2EE</span><span style="">服务器</span><span style="" lang="EN-US">(</span><span style="">如</span><span style="" lang="EN-US"> Geronimo,JBoss 4, GlassFish,WebLogic)</span><span style="">的测试</span><span style="" lang="EN-US">,</span><span style="">其中通过</span><span style="" lang="EN-US">JCA 1.5 resource adaptors</span><span style="">的配置</span><span style="" lang="EN-US">,<br></span><span style="">可以让</span><span style="" lang="EN-US">ActiveMQ</span><span style="">可以自动的部署到任何兼容</span><span style="" lang="EN-US">J2EE 1.4 </span><span style="">商业服务器上</span><span style="" lang="EN-US"><br>5.</span><span style="">支持多种传送协议</span><span style="" lang="EN-US">:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA<br>6.</span><span style="">支持通过</span><span style="" lang="EN-US">JDBC</span><span style="">和</span><span style="" lang="EN-US">journal</span><span style="">提供高速的消息持久化</span><span style="" lang="EN-US"><br>7.</span><span style="">从设计上保证了高性能的集群</span><span style="" lang="EN-US">,</span><span style="">客户端</span><span style="" lang="EN-US">-</span><span style="">服务器</span><span style="" lang="EN-US">,</span><span style="">点对点</span><span style="" lang="EN-US"><br>8.</span><span style="">支持</span><span style="" lang="EN-US">Ajax<br>9.</span><span style="">支持与</span><span style="" lang="EN-US">Axis</span><span style="">的整合</span><span style="" lang="EN-US"><br>10.</span><span style="">可以很容易得调用内嵌</span><span style="" lang="EN-US">JMS provider,</span><span style="">进行测试</span><span style="" lang="EN-US"></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Calibri;"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="">作为一个</span><span style="" lang="EN-US">JMS client </span><span style="">都需要以下的组成</span><span style="" lang="EN-US"><br>Administered Objects</span><span style="">:</span><span style="" lang="EN-US">ConnectionFactory</span><span style="">,</span><span style="" lang="EN-US">Destination<br>Connection</span><span style="">;</span><span style="" lang="EN-US"><br>Session<br>Message Producers/Message Cosumers<br>Messages</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Calibri;"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Hello</span></span><span style="">实例</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">=================================Hello.java===========================<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">import java.io.Serializable;<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style="font-size: small;"><span style="">  </span><span lang="EN-US"><span style="font-family: Calibri;">/**Hello.java</span></span><span style="">用来传递</span><span lang="EN-US"><span style="font-family: Calibri;">JAVA</span></span><span style="">对象</span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">* Author: cjp<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">* Date: 2005-11-8<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">* Time: 22:24:02<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">*/<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">public class Hello implements Serializable {<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">private String id;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">private Hello hello;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">private PointList pointList;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">public String getId() {<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">return id;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">public void setId(String id) {<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">this.id = id;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">public Hello getHello() {<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">return hello;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">public void setHello(Hello hello) {<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">this.hello = hello;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">=========================SpringTest .java========================<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">import org.springframework.jms.core.JmsTemplate;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">import org.springframework.jms.core.MessageCreator;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">import org.springframework.test.AbstractDependencyInjectionSpringContextTests;<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">import javax.jms.*;<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">/**<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style="font-size: small;"><span style="">  </span><span lang="EN-US"><span style="font-family: Calibri;">*</span></span><span style="">发送</span><span lang="EN-US"><span style="font-family: Calibri;">JMS</span></span><span style="">消息</span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">*/<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">public class SpringTest extends AbstractDependencyInjectionSpringContextTests<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">{<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">protected String[] getConfigLocations()<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">{<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">return new String[]{"file:D://wosame//test//com//wosame//room//jms//jms.xml"};<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">public void testSendMessage() throws Exception<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">{<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">JmsTemplate jmsTemplate = (JmsTemplate) applicationContext.getBean("jmsTemplate");<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">jmsTemplate.send(new MessageCreator()<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">{<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">public Message createMessage(Session session) throws JMSException<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">{<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">ObjectMessage message=session.createObjectMessage();<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Hello hello=new Hello();<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">hello.setId("test");<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">message.setObject(hello);<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">return message;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">});<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">================================HelloMDP .java==================================<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">/**<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style="font-size: small;"><span style="">  处理</span><span lang="EN-US"><span style="font-family: Calibri;">JMS</span></span><span style="">消息</span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">*/<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">import org.apache.commons.logging.Log;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">import org.apache.commons.logging.LogFactory;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">import javax.jms.*;<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">public class HelloMDP implements MessageListener<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">{<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">protected Log log = LogFactory.getLog(HelloMDP.class);<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">public void onMessage(Message message)<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">{<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">try<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">{<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">ObjectMessage objMessage = (ObjectMessage) message;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Hello hello= (Hello) objMessage.getObject();<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">System.out.println("hello.getId() = " + hello.getId());<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">} catch (JMSException e)<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">{<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">log.error("Parse failed", e);<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">}<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">================================jms.xml==================================<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">"http://www.springframework.org/dtd/spring-beans.dtd"&gt;<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;beans&gt;<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style=""><span style="font-size: small;">  </span></span><span lang="EN-US"><span style="font-size: small; font-family: Calibri;">&lt;!--</span><a href="http://embed.chinaitlab.com/" target="_blank"><span style="" lang="EN-US"><span lang="EN-US">嵌入式</span></span></a></span><span style="font-size: small;"><span style="">的</span><span lang="EN-US"><span style="font-family: Calibri;">JMS</span></span><span style="">连接,也就是跟随</span><span lang="EN-US"><span style="font-family: Calibri;">JVM</span></span><span style="">一起启动</span><span lang="EN-US"><span style="font-family: Calibri;">,</span></span><span style="">可以参看</span><span lang="EN-US"><span style="font-family: Calibri;">activemq</span></span><span style="">的文档</span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">--&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;bean id="connectionFactory" class="org.activemq.ActiveMQConnectionFactory"&gt; &lt;property name="brokerURL" value="vm://localhost"/&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;property name="useEmbeddedBroker" value="true"/&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;/bean&gt;<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style="font-size: small;"><span style="">  </span><span lang="EN-US"><span style="font-family: Calibri;">&lt;!--</span></span><span style="">消息监听器,也就是消息的具体的处理器</span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">--&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;bean id="HelloMDP" class="HelloMDP"/&gt;<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style="font-size: small;"><span style="">  </span><span lang="EN-US"><span style="font-family: Calibri;">&lt;!--jms</span></span><span style="">监听需要</span><span lang="EN-US"><span style="font-family: Calibri;">JTA</span></span><span style="">容器的支持</span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">--&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;bean id="activeMQContainer" class="org.activemq.jca.JCAContainer"&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;property name="workManager"&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;bean id="workManager" class="org.activemq.work.SpringWorkManager"/&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;/property&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;property name="resourceAdapter"&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;bean id="activeMQResourceAdapter" class="org.activemq.ra.ActiveMQResourceAdapter"&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;property name="serverUrl" value="vm://localhost"/&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;/bean&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;/property&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;/bean&gt;<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style="font-size: small;"><span style="">  </span><span lang="EN-US"><span style="font-family: Calibri;">&lt;!--</span></span><span style="">消息的消费者,也就是将监听器与具体的队列关联</span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">--&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;bean id="HelloQueueConsumer" factory-method="addConnector" factory-bean="activeMQContainer"&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;property name="activationSpec"&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;bean class="org.activemq.ra.ActiveMQActivationSpec"&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;property name="destination" value="Hello.Queue"/&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;property name="destinationType" value="javax.jms.Queue"/&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;/bean&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;/property&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;property name="ref" value="HelloMDP"/&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;/bean&gt;<br></span></span><span style="">  </span></span><span lang="EN-US"><br></span><span style="font-size: small;"><span style="">  </span><span lang="EN-US"><span style="font-family: Calibri;">&lt;!--spring</span></span><span style="">的</span><span lang="EN-US"><span style="font-family: Calibri;">JMS template,</span></span><span style="">用来发送</span><span lang="EN-US"><span style="font-family: Calibri;">JMS</span></span><span style="">消息到指定的队列</span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">--&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;property name="defaultDestinationName" value="Hello.Queue"/&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;property name="connectionFactory" ref="connectionFactory"/&gt;<br></span></span><span style="">  </span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">&lt;/bean&gt;<br></span></span><span style="">  </span><span lang="EN-US"><span style="font-family: Calibri;">&lt;/beans&gt;</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Calibri;"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="">例子二</span><span lang="EN-US"><span style="font-family: Calibri;"> MQ</span></span><span style="">源码</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="" lang="EN-US">import java.util.Arrays;<br>import java.util.Date;<br><br>import javax.jms.Connection;<br>import javax.jms.DeliveryMode;<br>import javax.jms.Destination;<br>import javax.jms.MessageProducer;<br>import javax.jms.Session;<br>import javax.jms.TextMessage;<br><br>import org.apache.activemq.ActiveMQConnection;<br>import org.apache.activemq.ActiveMQConnectionFactory;<br>import org.apache.activemq.util.IndentPrinter;<br><br>/**<br>* A simple tool for publishing messages<br>* <br>* @version $Revision: 1.2 $<br>*/<br>public class ProducerTool {<br><br>    private Destination destination;<br>    private int messageCount = 10;<br>    private long sleepTime = 0L;<br>    private boolean verbose = true;<br>    private int messageSize = 255;<br>    private long timeToLive;<br>    private String user = ActiveMQConnection.DEFAULT_USER;<br>    private String password = ActiveMQConnection.DEFAULT_PASSWORD;<br>    private String url = ActiveMQConnection.DEFAULT_BROKER_URL;<br>    private String subject = "TOOL.DEFAULT";<br>    private boolean topic = false;<br>    private boolean transacted = false;<br>    private boolean persistent = false;<br><br>    public static void main(String[] args) {<br>        ProducerTool producerTool = new ProducerTool();<br>      String[] unknonwn = CommnadLineSupport.setOptions(producerTool, args);<br>      if( unknonwn.length &gt; 0 ) {<br>          System.out.println("Unknown options: "+Arrays.toString(unknonwn));<br>            System.exit(-1);<br>      }          <br>      producerTool.run();<br>    }<br><br>    public void run() {<br>        Connection connection=null;<br>        try {<br>            System.out.println("Connecting to URL: " + url);<br>            System.out.println("Publishing a Message with size " + messageSize+ " to " + (topic ? "topic" : "queue"<span style=""> </span>+ ": " + subject);<br>            System.out.println("Using " + (persistent ? "persistent" : "non-persistent"<span style=""> </span>+ " messages"<span style=""> </span>;<br>            System.out.println("Sleeping between publish " + sleepTime + " ms"<span style=""> </span>;<br>            if (timeToLive != 0) {<br>                System.out.println("Messages time to live " + timeToLive + " ms"<span style=""> </span>;<br>            }<br><br>            // Create the connection.<br>            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url);            <br>            connection = connectionFactory.createConnection();<br>            connection.start();<br><br>            // Create the session<br>            Session session = connection.createSession(transacted, Session.AUTO_ACKNOWLEDGE);<br>            if (topic) {<br>                destination = session.createTopic(subject);<br>            } else {<br>                destination = session.createQueue(subject);<br>            }<br><br>            // Create the producer.<br>            MessageProducer producer = session.createProducer(destination);<br>            if (persistent) {<br>                producer.setDeliveryMode(DeliveryMode.PERSISTENT);<br>            } else {<br>                producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);<br>            }            <br>            if (timeToLive != 0)<br>                producer.setTimeToLive(timeToLive);<br><br>            // Start sending messages<br>            sendLoop(session, producer);<br><br>            System.out.println("Done."<span style=""> </span>;<br><br>            // Use the ActiveMQConnection interface to dump the connection stats.<br>            ActiveMQConnection c = (ActiveMQConnection) connection;<br>            c.getConnectionStats().dump(new IndentPrinter());<br><br>        } catch (Exception e) {<br>            System.out.println("Caught: " + e);<br>            e.printStackTrace();<br>        } finally {<br>            try { <br>                connection.close();<br>            } catch (Throwable ignore) {<br>            }<br>        }<br>    }<br><br>    protected void sendLoop(Session session, MessageProducer producer)<br>            throws Exception {<br><br>        for (int i = 0; i &lt; messageCount || messageCount == 0; i++) {<br><br>            TextMessage message = session<br>                    .createTextMessage(createMessageText(i));<br><br>            if (verbose) {<br>                String msg = message.getText();<br>                if (msg.length() &gt; 50) {<br>                    msg = msg.substring(0, 50) + "...";<br>                }<br>                System.out.println("Sending message: " + msg);<br>            }<br><br>            producer.send(message);<br>            if (transacted) {<br>                session.commit();<br>            }<br><br>            Thread.sleep(sleepTime);<br><br>        }<br><br>    }<br><br>    private String createMessageText(int index) {<br>        StringBuffer buffer = new StringBuffer(messageSize);<br>        buffer.append("Message: " + index + " sent at: " + new Date());<br>        if (buffer.length() &gt; messageSize) {<br>            return buffer.substring(0, messageSize);<br>        }<br>        for (int i = buffer.length(); i &lt; messageSize; i++) {<br>            buffer.append(' ');<br>        }<br>        return buffer.toString();<br>    }<br><br><br>    public void setPersistent(boolean durable) {<br>        this.persistent = durable;<br>    }<br>    public void setMessageCount(int messageCount) {<br>        this.messageCount = messageCount;<br>    }<br>    public void setMessageSize(int messageSize) {<br>        this.messageSize = messageSize;<br>    }<br>    public void setPassword(String pwd) {<br>        this.password = pwd;<br>    }<br>    public void setSleepTime(long sleepTime) {<br>        this.sleepTime = sleepTime;<br>    }<br>    public void setSubject(String subject) {<br>        this.subject = subject;<br>    }<br>    public void setTimeToLive(long timeToLive) {<br>        this.timeToLive = timeToLive;<br>    }<br>    public void setTopic(boolean topic) {<br>        this.topic = topic;<br>    }<br>    public void setQueue(boolean queue) {<br>        this.topic = !queue;<br>    }    <br>    public void setTransacted(boolean transacted) {<br>        this.transacted = transacted;<br>    }<br>    public void setUrl(String url) {<br>        this.url = url;<br>    }<br>    public void setUser(String user) {<br>        this.user = user;<br>    }<br>    public void setVerbose(boolean verbose) {<br>        this.verbose = verbose;<br>    }<br>}</span></p>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics