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

1

 package ch02.chat;

 import java.io.Serializable;

 import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
/*本工具封装了*/ import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber; import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory; public class JMSTopic {
TopicConnectionFactory connectionFactory;
// Connection :JMS 客户端到JMS Provider 的连接
TopicConnection connection = null;
//用来发布的会话 //TopicSession proSession = null;
//2一个订阅会话
//TopicSession conSession = null;
TopicSession session=null; //主题发布者
MessageProducer producer=null;
//主题
MessageConsumer consumer=null; // Destination :消息的目的地;消息发送给谁.
Destination destination;
// MessageProducer:消息发送者 //默认构造函数,默认的连接activemq,可以写多个构造函数
public JMSTopic()
{
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
try {
connection= connectionFactory.createTopicConnection();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
connection.start();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
public JMSTopic(String user,String name)
{
connectionFactory = new ActiveMQConnectionFactory(
user,
name,
"tcp://localhost:61616");
try {
connection= connectionFactory.createTopicConnection();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
connection.start();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } //设计session类型
public void setSession() throws JMSException
{
session= connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); }
//设置为原子类型
public void setAtomicSession() throws JMSException
{
session= connection.createTopicSession(true, Session.AUTO_ACKNOWLEDGE); } //此处先固定消息为String类型
public void writeMessage(String t,String message,int priority )
{
try { producer=session.createProducer(session.createTopic(t)); //使用message构造TextMessage
TextMessage text=session.createTextMessage();
text.setJMSPriority(priority);
text.setText(message);
producer.send(text); } catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//创建发布会话应该是可以配置的,此处先固定 } public void writeMessage(String t,Object o)
{
try { producer=session.createProducer(session.createTopic(t)); //使用message构造TextMessage
ObjectMessage text=session.createObjectMessage();
text.setObject((Serializable) o);
producer.send(text); } catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//创建发布会话应该是可以配置的,此处先固定 } //使用某个Message监听器来监听某个Topic
public void receiveMsg(String c,MessageListener ml)
{
try { Topic t=session.createTopic(c);
consumer=session.createConsumer(t);
//设置过来的监视器
consumer.setMessageListener(ml); } catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
public Message receiveMsg(String c)
{
try { Topic t=session.createTopic(c);
consumer=session.createConsumer(t);
//设置过来的监视器
Message message=consumer.receive();
return message; } catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//同步接收信息 public void commit() throws JMSException
{
session.commit();
}
public void rollback() throws JMSException
{
session.rollback();
}
public void close() throws JMSException
{
if(connection!=null) connection.close();
if(session!=null) session.close();
if(producer!=null) session.close();
if(consumer!=null) consumer.close(); } }

2.如何使用呢?

a.做个有关事务的实

 package ch02.chat;

 import java.util.Scanner;

 import javax.jms.JMSException;
import javax.jms.Session; public class ClientTest {
public static void main(String args[]) throws JMSException
{
//第一个例子,建立一个原子的session做个实验看看,这个一个不会发送任何信息到服务器,
JMSTopic jt=new JMSTopic();
//jt.setSession();
try{ jt.setAtomicSession(); jt.writeMessage("que1", "hansongjiang",4);
int x=10/0; //会抛出异常,实现回滚,所以que1中不会添加任何信息
jt.writeMessage("que1","hansong",4);
jt.commit();
}
catch(Exception e)
{
jt.rollback(); }
finally
{ jt.close();
} //如果
/* jt=new JMSTopic();
try
{
jt.setSession();
jt.writeMessage("que1", "hansongjiang",4);
//int x=10/0;
jt.writeMessage("que1","zhangsan",4); }
catch(Exception e)
{
System.out.println("异常我抓住了"); } */ } }

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

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

 package ch02.chat;

 import java.util.Scanner;

 import javax.jms.JMSException;
import javax.jms.Session; public class ClientTest {
public static void main(String args[]) throws JMSException
{ JMSTopic jt=new JMSTopic();
try
{
jt.setSession();
jt.writeMessage("que1", "hansongjiang",4);
//int x=10/0;
jt.writeMessage("que1","zhangsan",4); }
catch(Exception e)
{
System.out.println("异常我抓住了"); } */ } }

简单的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. Java发送邮件(带附件)

    实现java发送邮件的过程大体有以下几步: 准备一个properties文件,该文件中存放SMTP服务器地址等参数. 利用properties创建一个Session对象 利用Session创建Mess ...

  2. 解决eclipse复制粘贴js代码卡死的问题

    鸣谢:http://blog.csdn.net/zhangzikui/article/details/24805935 ---------------------------------------- ...

  3. "Principles of Reactive Programming" 之<Actors are Distributed> (2)

    Actor Path 我们知道actor是有层级的(hierarchical),第.每个actor在它的父actor的名字空间下都有一个名字.这样就构成了一个树状的结构,就像是文件系统.每个actor ...

  4. NGUI自适应分辨率,黑边自动填充, 无黑边,等比例缩放

    原地址:http://game.ceeger.com/forum/read.php?tid=16571 1,给背景添加一个UIstretch, .将style选择最后一个FitInternalKeep ...

  5. Java 程序检查远程服务器状态

    通常我们以命令的方式判断远程服务器是否正常运行有两种方式,ping 或 telnet 一个远程端口.假设我们要检查的远程服务器都是 Linux 系统. 从 JDK 1.5 以后, InetAddres ...

  6. 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理

    使用程序获取整型数据和浮点型数据在内存中的表示. C++中整型(int).短整型(short int).单精度浮点数(float).双精度浮点数(double)在内存中所占字节数不同,因此取值范围也不 ...

  7. 使用Nginx+Keepalived组建高可用负载平衡Web server集群

    一,首先说明一下网络拓扑结构: 1,Nginx 反向代理Server(HA):     ①Nginx master:192.168.1.157     ②Nginx backup:192.168.1. ...

  8. POJ1328——Radar Installation

    Radar Installation Description Assume the coasting is an infinite straight line. Land is in one side ...

  9. P137、面试题23:从上往下打印二叉树

    题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入如图的二叉树,则依次打印出8,6,10,5,7,9,11.(其实是按层遍历)二叉树结点的定义如下:struct Bin ...

  10. linux的终端,网络虚拟终端,伪终端(转)

      blog.csdn.net/todd911/article/details/8025540 Linux上许多网络服务应用,如l2tp.pptp.telnet,都用到了伪终端.有朋友在问这方面的概念 ...