今天无聊写段代码。。学习一下activemq,简单封装了一下activemq 的topic api。跟jdbc很类似

主要代码:

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; //主题发布者
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();
} } //此处先固定消息为String类型
public void writeMessage(String t,String message )
{
try {
proSession=connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); producer=proSession.createProducer(proSession.createTopic(t)); //使用message构造TextMessage
TextMessage text=proSession.createTextMessage();
text.setText(message);
producer.send(text); } catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//创建发布会话应该是可以配置的,此处先固定 }
public void writeMessage(String t,Object o )
{
try {
proSession=connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); producer=proSession.createProducer(proSession.createTopic(t)); //使用message构造TextMessage
ObjectMessage text=proSession.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 {
conSession=connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
Topic t=conSession.createTopic(c);
consumer=conSession.createConsumer(t);
//设置过来的监视器
consumer.setMessageListener(ml); } catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

2.测试,发送的消息是对象

a.一个序列化的Stduent 对象

 package ch02.chat;

 import java.io.Serializable;

 public class Student implements Serializable {
private int age;
private String name;
public Student(int age,String name)
{
this.age=age;
this.name=name; }
public String toString()
{
return "age ="+age+" name "+ "name";
} }

b.客户端发送

 package ch02.chat;

 public class ClientTest {
public static void main(String args[])
{
JMSTopic jt=new JMSTopic();
jt.writeMessage( "topic1",new Student(12,"han")); } }

c.客户端接受信息

 package ch02.chat;

 import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.TextMessage; public class ClientTest2 { public static void main(String args[])
{
JMSTopic jt=new JMSTopic(); jt.receiveMsg("topic1",new MessageListener()
{ @Override
public void onMessage(Message message) {
// TODO Auto-generated method stub
ObjectMessage tm = (ObjectMessage) message;
try {
System.out.println("Received message: " +tm.getObject());
} catch (JMSException e) {
e.printStackTrace();
} } } ); } }

运行喽

activemq api的封装的更多相关文章

  1. Atitit. C# java 的api 目录封装结构映射总结

    Atitit. C#  java 的api 目录封装结构映射总结 C# java ref System.Reflection System.Type, java.lang.ref concurrent ...

  2. 在eclipse中API的封装和调用

    自己写的API的封装和调用:1.写好api的方法的实现类.2.抽取一个javadoc文档.file->Export->java->javadoc->finish->Yes ...

  3. java webdriver的api的封装

    我们来看一下官网提供的代码写法,即最原始的写法: driver.findElement(By.id("kw")).click() 这样写是没任何问题的,但这样没有把元素对象,数据, ...

  4. 转:sock_ev——linux平台socket事件框架(socket API的封装) .

    把linux平台提供的有关socket操作的API进行封装是有必要的:基于stream操作的流程与基于dgram操作的流程略有不同,分别放在两个类中,但两者又有很多相似的操作,因此写一个基类,让其继承 ...

  5. Elasticsearch for python API模块化封装

    Elasticsearch for python API模块化封装 模块的具体功能 检测Elasticsearch节点是否畅通 查询Elasticsearch节点健康状态 查询包含的关键字的日志(展示 ...

  6. vue2.0 + vux (五)api接口封装 及 首页 轮播图制作

    1.安装 jquery 和 whatwg-fetch (优雅的异步请求API) npm install jquery --save npm install whatwg-fetch --save 2. ...

  7. 微信小程序API接口封装

    @ 目录 一,让我们看一下项目目录 二,让我们熟悉一下这三个文件目的(文件名你看着办) 三,页面js中如何使用 今天的API的封装,我们拿WX小程序开发中,对它的API (wx.request)对这个 ...

  8. windows phone 豆瓣api的封装

    利用周末的时候,重新封装一下豆瓣的api,就当是练手吧!其实现在网上好用的api很多,在这个demo里面基本上已经将整体框架搭建起来,本来想继续完善下去的.但是其实accesstoken的时候,一直拿 ...

  9. (转)iOS keychain API及其封装

    一. Keychain API KeyChain中item的结构为: 1.增加keychain Item OSStatus SecItemAdd (CFDictionaryRef attributes ...

随机推荐

  1. Recommender Systems引言

    我想站在大神肩膀上...貌似是计算所的一个小伙伴... 总结的很好,看得出来有一定的功底.... 不过对于自己看过了的东西,就不愿意再翻看第二遍了.恰好这本书和项亮那本很像,就直接看这本书了.顺便记记 ...

  2. EF+lambda表达式 实现LIKE模糊查询

    s => s.XianWID.StartsWith(str) 匹配以str开头的 s => s.XianWID.EndsWith(str) 匹配以str结尾的 s => s.Xian ...

  3. uva 10105

    数学  杨辉三角  多项式系数 #include <cstdio> int f[13] = {1}; void init() { for (int i = 1; i < 13; i+ ...

  4. php构造函数construct用法注意事项

    <?php class A { //特别注意,这里的下划线为两个 function __construct() { echo "I am the constructor of A.&l ...

  5. Android面试宝典(转)

    Java知识点包括:接口与抽象的使用及区别,多线程,socket基础,集合类,也有个别公司考察定义,很无语. C/C++知识点包括:指针的移动,排序算法,链表,有时还会有二叉树的遍历或图的遍历. 1. ...

  6. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-005-Pizza例子的订单流程()

    一. 1.订单流程定义文件order-flow.xml <?xml version="1.0" encoding="UTF-8"?> <flo ...

  7. iOS 10 使用相机及相簿闪退的问题修正

    http://www.cnblogs.com/onechen/p/5935579.html

  8. JavaScript 获取客户端计算机硬件及系统信息

    1.浏览器信息 //浏览器信息 function BrowserInfo() { var userLanguage = navigator.userLanguage;     // 用户在自己的操作系 ...

  9. imports,using,和include之间的区别

    Imports, Using基本一样,有两个作用 1.将后面命名空间中所有的名字导入到当前命名空间 2.为后面的名字取一个当前命名空间可以访问的别名. 比如StreamWriter这个类在System ...

  10. linux目录/术语/英文

    1./bin :获得最小的系统可操作性所需要的命令2./boot :内核和加载内核所需的文件3./dev :终端.磁盘.调制解调器等的设备项4./etc :关键的启动文件和配置文件5./home :用 ...