activemq api的封装

今天无聊写段代码。。学习一下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 对象

 1 package ch02.chat;
 2
 3 import java.io.Serializable;
 4
 5 public class Student implements Serializable {
 6     private int age;
 7     private String name;
 8     public Student(int age,String name)
 9     {
10         this.age=age;
11         this.name=name;
12
13
14     }
15     public String toString()
16     {
17         return "age ="+age+"  name "+ "name";
18     }
19
20 }

b.客户端发送

 1 package ch02.chat;
 2
 3 public class ClientTest {
 4     public static void main(String args[])
 5     {
 6         JMSTopic jt=new JMSTopic();
 7         jt.writeMessage( "topic1",new Student(12,"han"));
 8
 9
10
11     }
12
13 }

c.客户端接受信息

 1 package ch02.chat;
 2
 3 import javax.jms.JMSException;
 4 import javax.jms.Message;
 5 import javax.jms.MessageListener;
 6 import javax.jms.ObjectMessage;
 7 import javax.jms.TextMessage;
 8
 9
10 public class ClientTest2 {
11
12     public static void main(String args[])
13     {
14         JMSTopic jt=new JMSTopic();
15
16     jt.receiveMsg("topic1",new MessageListener()
17     {
18
19         @Override
20         public void onMessage(Message message) {
21             // TODO Auto-generated method stub
22             ObjectMessage tm = (ObjectMessage) message;
23             try {
24                 System.out.println("Received message: " +tm.getObject());
25             } catch (JMSException e) {
26                 e.printStackTrace();
27             }
28
29
30         }
31
32
33     }
34
35
36             );
37
38
39
40     }
41
42 }

运行喽

时间: 2024-10-02 16:46:48

activemq api的封装的相关文章

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

Atitit. C#  java 的api 目录封装结构映射总结 C# java ref System.Reflection System.Type, java.lang.ref concurrent thread System.Threading java.lang.Thread collection System.collection java.util.collection Io Sys.io sys.text sys.xml sys.data.sql sys.data sys.web s

java webdriver的api的封装

我们来看一下官网提供的代码写法,即最原始的写法: driver.findElement(By.id("kw")).click() 这样写是没任何问题的,但这样没有把元素对象,数据,业务逻辑分离,达不到装逼的效果,为了使这三方面分离,我们先来分析一下这句代码:这里面涉及到了三个对象:driver对象,By对象,WebElement对象.由于现在大多数人使用了所谓的Page-Object模式,具体请参考我另一篇博客: http://www.cnblogs.com/zhangfei/p/34

Hiredis API简单封装

最近一个C++项目中使用Redis作为主要存储工具,在代码中直接调用Hiredis的C API不方便.对其简单做了一下封装,主要目的是更方便的使用HGet.HMGet这样一些哈希操作,支持错误重连,当然通过封装也提高了代码的复用. RedisHelper.h 1 #ifndef _REDIS_HELPER_H 2 #define _REDIS_HELPER_H 3 4 #include <mutex> 5 #include <map> 6 #include <vector&g

ActiveMQ API 详解

4.1 开发JSM的步骤 广义上说,一个JMS 应用是几个JMS 客户端交换消息,开发JMS 客户端应用由以下几步构成: 用JNDI 得到ConnectionFactory 对象: 用ConnectionFactory 创建Connection 对象: 用Connection 对象创建一个或多个JMS Session: 用JNDI 得到目标队列或主题对象,即Destination 对象: 用Session 和Destination 创建MessageProducer 和MessageConsum

自动化测试框架 selenium api的封装

接上一篇 http://tianxietaotao.blog.51cto.com/12002420/1951701 这篇我大概介绍下我这个工具的简单介绍 先上图: 制作背景: Web自动化测试在现在测试领域已经越来越普遍,但是写代码对于好多测试猿代码基础较弱,搭建系统也比较麻烦.所以我抽闲暇时间做了这个简单的工具:下面简单介绍下功能 工具简单介绍: 1.工具栏:Resume:调试阶段执行到下一个断点 next:单步执行 debug/run 模式切换 执行.停止 2.用例树:用例采用execl或者

基于AFNetworking 3.0的集约性网络请求API再封装

基础请求 http://www.cnblogs.com/superbobo/p/5259304.html 音视频.文件下载: http://www.jianshu.com/p/f76830810b35

C提高 6 指针杂项 API函数封装,sockets封装 ,内存泄漏检测,日志库

指针杂项演示: 同一个函数分两次调用,执行不同的功能: 1,基本操作,被调函数分配内存 #include <stdio.h> #include <stdlib.h> #include <string.h> int getcontentlen(char *filename,char **buf,int *len) {         char *tmp = (char*)malloc(100);         if(tmp == NULL) return -1;    

8.1 服务器开发 API 函数封装,select 优化服务器和客户端

1 #include <unistd.h> 2 #include <sys/types.h> 3 #include <sys/socket.h> 4 #include <netinet/in.h> 5 #include <arpa/inet.h> 6 #include <signal.h> 7 #include <sys/wait.h> 8 9 #include <fcntl.h> 10 11 12 #incl

api.js封装请求

1. 传入对象格式如 { a:{ getData:{ url: 'xx/xx/xx', method: 'get', require:['id', 'name'], // 简单检查 必传参数确实则不发请求 changeParamsProp:{ // 防止后端更改参数名 id: 'userId' }, changeDataProp:{ }, cacheKey:'xxx' // 检查localStorage如果有这个key就不发请求 } }, b:{ } } 原文地址:https://www.cnb