天空中飘着小雨,实在是适合写代码的时节。

1

  1. package ch02.chat;
  2.  
  3. import java.io.Serializable;
  4.  
  5. import javax.jms.Connection;
  6. import javax.jms.ConnectionFactory;
  7. import javax.jms.Destination;
  8. import javax.jms.JMSException;
  9. import javax.jms.Message;
  10. import javax.jms.MessageConsumer;
  11. import javax.jms.MessageListener;
  12. import javax.jms.MessageProducer;
  13. import javax.jms.ObjectMessage;
  14. import javax.jms.Session;
  15. /*本工具封装了*/
  16.  
  17. import javax.jms.TextMessage;
  18. import javax.jms.Topic;
  19. import javax.jms.TopicConnection;
  20. import javax.jms.TopicConnectionFactory;
  21. import javax.jms.TopicPublisher;
  22. import javax.jms.TopicSession;
  23. import javax.jms.TopicSubscriber;
  24.  
  25. import org.apache.activemq.ActiveMQConnection;
  26. import org.apache.activemq.ActiveMQConnectionFactory;
  27.  
  28. public class JMSTopic {
  29. TopicConnectionFactory connectionFactory;
  30. // Connection :JMS 客户端到JMS Provider 的连接
  31. TopicConnection connection = null;
  32. //用来发布的会话
  33.  
  34. //TopicSession proSession = null;
  35. //2一个订阅会话
  36. //TopicSession conSession = null;
  37. TopicSession session=null;
  38.  
  39. //主题发布者
  40. MessageProducer producer=null;
  41. //主题
  42. MessageConsumer consumer=null;
  43.  
  44. // Destination :消息的目的地;消息发送给谁.
  45. Destination destination;
  46. // MessageProducer:消息发送者
  47.  
  48. //默认构造函数,默认的连接activemq,可以写多个构造函数
  49. public JMSTopic()
  50. {
  51. connectionFactory = new ActiveMQConnectionFactory(
  52. ActiveMQConnection.DEFAULT_USER,
  53. ActiveMQConnection.DEFAULT_PASSWORD,
  54. "tcp://localhost:61616");
  55. try {
  56. connection= connectionFactory.createTopicConnection();
  57. } catch (JMSException e) {
  58. // TODO Auto-generated catch block
  59. e.printStackTrace();
  60. }
  61. try {
  62. connection.start();
  63. } catch (JMSException e) {
  64. // TODO Auto-generated catch block
  65. e.printStackTrace();
  66. }
  67.  
  68. }
  69. public JMSTopic(String user,String name)
  70. {
  71. connectionFactory = new ActiveMQConnectionFactory(
  72. user,
  73. name,
  74. "tcp://localhost:61616");
  75. try {
  76. connection= connectionFactory.createTopicConnection();
  77. } catch (JMSException e) {
  78. // TODO Auto-generated catch block
  79. e.printStackTrace();
  80. }
  81. try {
  82. connection.start();
  83. } catch (JMSException e) {
  84. // TODO Auto-generated catch block
  85. e.printStackTrace();
  86. }
  87.  
  88. }
  89.  
  90. //设计session类型
  91. public void setSession() throws JMSException
  92. {
  93. session= connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
  94.  
  95. }
  96. //设置为原子类型
  97. public void setAtomicSession() throws JMSException
  98. {
  99. session= connection.createTopicSession(true, Session.AUTO_ACKNOWLEDGE);
  100.  
  101. }
  102.  
  103. //此处先固定消息为String类型
  104. public void writeMessage(String t,String message,int priority )
  105. {
  106. try {
  107.  
  108. producer=session.createProducer(session.createTopic(t));
  109.  
  110. //使用message构造TextMessage
  111. TextMessage text=session.createTextMessage();
  112. text.setJMSPriority(priority);
  113. text.setText(message);
  114. producer.send(text);
  115.  
  116. } catch (JMSException e) {
  117. // TODO Auto-generated catch block
  118. e.printStackTrace();
  119. }
  120. //创建发布会话应该是可以配置的,此处先固定
  121.  
  122. }
  123.  
  124. public void writeMessage(String t,Object o)
  125. {
  126. try {
  127.  
  128. producer=session.createProducer(session.createTopic(t));
  129.  
  130. //使用message构造TextMessage
  131. ObjectMessage text=session.createObjectMessage();
  132. text.setObject((Serializable) o);
  133. producer.send(text);
  134.  
  135. } catch (JMSException e) {
  136. // TODO Auto-generated catch block
  137. e.printStackTrace();
  138. }
  139. //创建发布会话应该是可以配置的,此处先固定
  140.  
  141. }
  142.  
  143. //使用某个Message监听器来监听某个Topic
  144. public void receiveMsg(String c,MessageListener ml)
  145. {
  146. try {
  147.  
  148. Topic t=session.createTopic(c);
  149. consumer=session.createConsumer(t);
  150. //设置过来的监视器
  151. consumer.setMessageListener(ml);
  152.  
  153. } catch (JMSException e) {
  154. // TODO Auto-generated catch block
  155. e.printStackTrace();
  156. }
  157.  
  158. }
  159. public Message receiveMsg(String c)
  160. {
  161. try {
  162.  
  163. Topic t=session.createTopic(c);
  164. consumer=session.createConsumer(t);
  165. //设置过来的监视器
  166. Message message=consumer.receive();
  167. return message;
  168.  
  169. } catch (JMSException e) {
  170. // TODO Auto-generated catch block
  171. e.printStackTrace();
  172. }
  173. return null;
  174. }
  175. //同步接收信息
  176.  
  177. public void commit() throws JMSException
  178. {
  179. session.commit();
  180. }
  181. public void rollback() throws JMSException
  182. {
  183. session.rollback();
  184. }
  185. public void close() throws JMSException
  186. {
  187. if(connection!=null) connection.close();
  188. if(session!=null) session.close();
  189. if(producer!=null) session.close();
  190. if(consumer!=null) consumer.close();
  191.  
  192. }
  193.  
  194. }

2.如何使用呢?

a.做个有关事务的实

  1. package ch02.chat;
  2.  
  3. import java.util.Scanner;
  4.  
  5. import javax.jms.JMSException;
  6. import javax.jms.Session;
  7.  
  8. public class ClientTest {
  9. public static void main(String args[]) throws JMSException
  10. {
  11. //第一个例子,建立一个原子的session做个实验看看,这个一个不会发送任何信息到服务器,
  12. JMSTopic jt=new JMSTopic();
  13. //jt.setSession();
  14. try{
  15.  
  16. jt.setAtomicSession();
  17.  
  18. jt.writeMessage("que1", "hansongjiang",4);
  19. int x=10/0; //会抛出异常,实现回滚,所以que1中不会添加任何信息
  20. jt.writeMessage("que1","hansong",4);
  21. jt.commit();
  22. }
  23. catch(Exception e)
  24. {
  25. jt.rollback();
  26.  
  27. }
  28. finally
  29. {
  30.  
  31. jt.close();
  32. }
  33.  
  34. //如果
  35. /* jt=new JMSTopic();
  36. try
  37. {
  38. jt.setSession();
  39. jt.writeMessage("que1", "hansongjiang",4);
  40. //int x=10/0;
  41. jt.writeMessage("que1","zhangsan",4);
  42.  
  43. }
  44. catch(Exception e)
  45. {
  46. System.out.println("异常我抓住了");
  47.  
  48. }
  49.  
  50. */
  51.  
  52. }
  53.  
  54. }

入队的信息为的信息为个数为0

b.非事务的执行后呢?我们使用getAtomicSession获得的session执行后入topic个数为1

  1. package ch02.chat;
  2.  
  3. import java.util.Scanner;
  4.  
  5. import javax.jms.JMSException;
  6. import javax.jms.Session;
  7.  
  8. public class ClientTest {
  9. public static void main(String args[]) throws JMSException
  10. {
  11.  
  12. JMSTopic jt=new JMSTopic();
  13. try
  14. {
  15. jt.setSession();
  16. jt.writeMessage("que1", "hansongjiang",4);
  17. //int x=10/0;
  18. jt.writeMessage("que1","zhangsan",4);
  19.  
  20. }
  21. catch(Exception e)
  22. {
  23. System.out.println("异常我抓住了");
  24.  
  25. }
  26.  
  27. */
  28.  
  29. }
  30.  
  31. }

简单的activemq的封装和使用的更多相关文章

  1. jQuery-实现简单的Ajax请求封装

    封装的意义在于复用,在于减少重复的代码. 我在项目中做了简单的Ajax请求封装,实现方式如下: //封装Ajax请求 $.extend({ ajaxDirect:function(url,type,d ...

  2. Springboot简单集成ActiveMQ

    Springboot简单集成ActiveMQ 消息发送者的实现 pom.xml添加依赖 <dependency> <groupId>org.springframework.bo ...

  3. vue axios接口封装、Promise封装、简单的axios方法封装、vue接口方法封装、vue post、get、patch、put方法封装

    相信大家在做前后端数据交互的时候都会给请求做一些简单的封装就像之前封装ajax方法一样axios的封装也是一样的简单下面这个就是封装的axios的方法,require.js import axios ...

  4. 简单通用JDBC辅助类封装

    哎,最近很好久没在博客园写点东西了,由于工作的原因,接触公司自己研发的底层orm框架,偶然发现该框架在调用jdbc操作的时候参考的是hibernate 里面的SimpleJdbcTemplate,这里 ...

  5. 简单的cookie读写封装

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 简单的INI解析封装

    简单封装的一个ini解析处理类(支持跨平台).支持功能: 加载并解析指定ini文件中的配置: 读取指定 section 下的指定 key 的值.提示:支持按数值型读取,或按文本类型读取:使用示例: a ...

  7. JMS学习二(简单的ActiveMQ实例)

    下载安装ActiveMQ服务,下载地址当然可以去官网下载 http://activemq.apache.org/download-archives.html ActiveMQ安装很简单,下载解压后到b ...

  8. Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法

    最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分 ...

  9. jquery 选项卡切换、选项卡封装、简单的jquery选项卡封装、tab切换效果

    相信选项卡切换是大家常用的效果单独写一个选项卡切换很方便但是要是一个页面出现多个选项卡不做封装的话会显得代码很杂乱 <div class="bodyCenter"> & ...

随机推荐

  1. 修改radio、checkbox、select默认样式的方法

    样式 radio select checkbox 兼容性 现在前端页面效果日益丰富,默认的input组件样式显然已经不能满足需求.趁着这次开发的页面中有这方面的需求,在这里整理一下修改radio.ch ...

  2. HTTP verb的安全性和幂等性

    Http协议规定了不同方法的安全特性和幂等特性,作为服务提供者的服务器必需为客户端提供这些特性. 安全性,仅指该方法的多次调用不会产生副作用,不涉及传统意义上的“安全”,这里的副作用是指资源状态.即, ...

  3. 【概率】COGS 1487:麻球繁衍

    Description 万有引力定律: “使物体相互靠近的力的大小与物体的质量成正比——而物体的质量又由同一种力决定.这是一个有趣并且有益的例子,说明了科学是如何用A证明B,再用B证明A的.”——安布 ...

  4. 转Spring+Hibernate+EHcache配置(二)

    Spring AOP+EHCache简单缓存系统解决方案 需要使用Spring来实现一个Cache简单的解决方案,具体需求如下:使用任意一个现有开源Cache Framework,要求可以Cache系 ...

  5. js获取fck值的代码方法

    引入js文件 <script type="text/javascript" src="${basePath}/FCKeditor/fckeditor.js" ...

  6. Unique Binary Search Trees II

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

  7. hdu 1525 Euclid's Game 博弈论

    思路:两个数a和b,总会出现的一个局面是b,a%b,这是必然的,如果a>=b&&a<2*b,那么只有一种情况,直接到b,a%b.否则有多种情况. 对于a/b==1这种局面, ...

  8. cocos2d-html5 onEnter init ctor构造函数 ----js特有特性(和c++有一点不一样)

    ctor 构造函数, new 一个对象的时候调用-----coco2d-js , 默认ctor,为对象的构造函数,其它也可以默认其它函数为构造函数. 说白了就是: ctor构造函数 new 对象后自动 ...

  9. 【转】linux下cvs配置

    1.  验证是否已安装CVS #rpm -q cvs 如果能显示出类似这样的版本信息,证明已安装CVS: #cvs-1.11.19 若没有安装信息,则需要从htttp://www.cvshome.or ...

  10. Android:属性scaleType与图片的显示

    ImageView是Android中的基础图片显示控件,该控件有个重要的属性是ScaleType,该属性用以表示显示图片的方式, 共有8种取值 matrix 用矩阵来绘制(从左上角起始的矩阵区域) f ...