简单的activemq的封装和使用

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

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

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
55 }

入队的信息为的信息为个数为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
13         JMSTopic jt=new  JMSTopic();
14         try
15         {
16         jt.setSession();
17         jt.writeMessage("que1", "hansongjiang",4);
18         //int x=10/0;
19         jt.writeMessage("que1","zhangsan",4);
20
21         }
22         catch(Exception e)
23         {
24             System.out.println("异常我抓住了");
25
26         }
27
28         */
29
30
31     }
32
33 }

时间: 2024-10-17 13:36:50

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

简单的JS运动封装实例---侧栏分享到

1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 <style> 7 #div1 {width: 100px; height: 200px; background: red;

简单的INI解析封装

简单封装的一个ini解析处理类(支持跨平台).支持功能: 加载并解析指定ini文件中的配置: 读取指定 section 下的指定 key 的值.提示:支持按数值型读取,或按文本类型读取:使用示例: 1 auto fWidth = 480.0f; 2 auto fHeight = 320.0f; 3 4 ns_ini::IniParser ini; 5 ini.open(strConfigFile.c_str()); 6 fWidth = ini.readFloat("glview",

简单的cookie读写封装

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>简单的cookie封装</title></head><body> </body><script>var cookies={ name:this.name, value:this.value, day:this.da

hibernate简单工具类的封装

通过该工具类可以获得hibernate的session对象,并在项目中使用该工具 public class HibernateUtil { private static SessionFactory sessionFactory; //表示构造方法私有化,保证单例模式 private MyHibernateSessionFactory(){ } /** * @return 获取会话工厂 */ public static SessionFactory getSessionFactory() { i

6.17 类思想的简单学习, 以及 封装

------program.cs-------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 封装 { class Program { static void Main(string[] args) { student s = new student();//实例化 teacher t =

springboot 简单使用 activemq 接收消息

1.在pom.xml 加入配置文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> 2.编辑代码 import org.springframework.jms.annotation.JmsListener; @Component pub

简单animate方法的封装

function animate(ele,json,fn){ clearInterval(ele.timer); ele.timer = setInterval(function () { var bool = true; console.log(1); for(var k in json){ if(k == "opacity"){ var leader = getStyle(ele,k)*100||0; var step = (json[k]*100-leader)/10; step

简单的路由代码封装

package main import ( "github.com/gin-gonic/gin" "topic.jtthink.com/src" ) func main() { router := gin.Default() v1 := router.Group("/v1/topics") { v1.GET("", src.GetTopicList) v1.GET("/:topic_id", src.Get

深入浅出JMS(二)--ActiveMQ简单介绍以及安装

现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JMS,我们这篇博文介绍一款开源的JMS具体实现--ActiveMQ.ActiveMQ是一个易于使用的消息中间件. 消息中间件 我们简单的介绍一下消息中间件,对它有一个基本认识就好,消息中间件(MOM:Message Orient middleware). 消息中间件有很多的用途和优点: 1. 将数据从