一、ActiveMq想要实现必备的六要素(基于jms)
  //链接工厂。用于创建链接
private ConnectionFactory factory; //用于访问Mq的链接,由链接工厂创建
private Connection connection; //消息队列的一次持久的有状态的会话,由链接创建
private Session session; //本次访问activeMq队列的目的地(我觉得是别名,你放数据的队列的名字),由会话创建
private Destination destination; //消息的生成者,会话中消息就是由他生成的。由session创建
private MessageProducer producer; 或者// 消息接收方 private MessageConsumer consumer; //消息,消息在传递中的载体可以由session创建,也可以通过session从ActiveMq中获取
private Message message;
  
 
 
二 、 生成者源码
public void  sendMsgToMq(String msg) {    传个要发送到队列的信息进来

           try{
/**
* 1、实例化链接工厂
*
* ActiveMQConnectionFactory - 由ActiveMQ实现的ConnectionFactory接口实现类.
* 构造方法: public ActiveMQConnectionFactory(String userName, String password, String brokerURL)
* userName:用户名 默认admin
* password:密码 默认admin
* brokerURL:activemq服务的地址 消息服务的端口:61616 管理控制台的端口:8161
* tcp协议 tcp://localhost:61616
*/
factory = new org.apache.activemq.ActiveMQConnectionFactory("admin", "admin","tcp://localhost:61616");
//2.创建连接
connection = factory.createConnection();
connection.start();
/**
* 3、创建会话
* 方法 - connection.createSession(boolean transacted, int acknowledgeMode);
*
* transacted 可选值 true | false
* 当值为true,第二个参数失效 ;读取消息之后,事物需求手动提交 session.commit();
* 当值为false,表示启用消息确认机制,即第二个参数起作用
*
* acknowledgeMode 消息确认机制 可选值:
* Session.AUTO_ACKNOWLEDGE - 自动确认消息机制 一般选这个
* Session.CLIENT_ACKNOWLEDGE - 客户端确认消息机制
* Session.DUPS_OK_ACKNOWLEDGE - 有副本的客户端确认消息机制
*/
session = connection.createSession(false, session.AUTO_ACKNOWLEDGE);
//4. 创建目的地, 目的地命名即队列命名, 消息消费者需要通过此命名访问对应的队列
destination = session.createQueue("text-msg");
// 5. 创建消息生成者, 创建的消息生成者与某目的地对应, 即方法参数目的地.
producer = session.createProducer(destination);
//6 .创建消息对象 创建一个文本消息, 此消息对象中保存要传递的文本数据.
message = session.createTextMessage(msg); //createTextMessage 因为是文本信息
//7.将消息对象发送到队列
producer.send(message); } catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(null!=producer) {
try {
producer.close();
} catch (JMSException e) {
// TODO Auto-generated catch block 关闭资源
e.printStackTrace();
}
}
if(session!=null) { try {
session.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
if (connection!=null) {
try {
connection.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
 
 
 
三  、 消息的消费者(传进来的是目的地)

public void  sendMsgToMq(String msg) {    传个要发送到队列的信息进来

           try{
/**
* 1、实例化链接工厂
*
* ActiveMQConnectionFactory - 由ActiveMQ实现的ConnectionFactory接口实现类.
* 构造方法: public ActiveMQConnectionFactory(String userName, String password, String brokerURL)
* userName:用户名 默认admin
* password:密码 默认admin
* brokerURL:activemq服务的地址 消息服务的端口:61616 管理控制台的端口:8161
* tcp协议 tcp://localhost:61616
*/
factory = new org.apache.activemq.ActiveMQConnectionFactory("admin", "admin","tcp://localhost:61616");
//2.创建连接
connection = factory.createConnection();
connection.start();
/**
* 3、创建会话
* 方法 - connection.createSession(boolean transacted, int acknowledgeMode);
*
* transacted 可选值 true | false
* 当值为true,第二个参数失效 ;读取消息之后,事物需求手动提交 session.commit();
* 当值为false,表示启用消息确认机制,即第二个参数起作用
*
* acknowledgeMode 消息确认机制 可选值:
* Session.AUTO_ACKNOWLEDGE - 自动确认消息机制 一般选这个
* Session.CLIENT_ACKNOWLEDGE - 客户端确认消息机制
* Session.DUPS_OK_ACKNOWLEDGE - 有副本的客户端确认消息机制
*/
session = connection.createSession(false, session.AUTO_ACKNOWLEDGE);
//4. 创建目的地, 目的地命名即队列命名, 消息消费者需要通过此命名访问对应的队列
destination = session.createQueue("text-msg");
// 5. 创建消息生成者, 创建的消息生成者与某目的地对应, 即方法参数目的地.
producer = session.createProducer(destination);
//6 .创建消息对象 创建一个文本消息, 此消息对象中保存要传递的文本数据.
message = session.createTextMessage(msg); //createTextMessage 因为是文本信息
//7.将消息对象发送到队列
producer.send(message); } catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(null!=producer) {
try {
producer.close();
} catch (JMSException e) {
// TODO Auto-generated catch block 关闭资源
e.printStackTrace();
}
}
if(session!=null) { try {
session.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
if (connection!=null) {
try {
connection.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
 
 
四 、 测试类
@Test
/**
* 发送文本的测试
*/
public void sendMsgtoMqTest() {
TextMessageProducer textProducer = new TextMessageProducer();
textProducer.sendMsgToMq("eeesssss"); 传文本信息进去 } /**
* 接受文本的测试
*/
@Test
public void reciMsgToMqTest() { TextMessageConsumer textConsumer = new TextMessageConsumer(); textConsumer.recieverFromMq("text-msg"); 传目的地名称 }
 
 
五、对象类型信息在消息队列中的存取
 
 
一 、 生成者(和文本唯一的不同就是消息的载体对象类型是Object的)
// 5. 消息的生成者处理者
message = session.createObjectMessage(order); ------------> 文本的 message = session.createTextMessage(msg);
 
二  、消费者

                           message = consumer.receive();
if (null != message) {
ObjectMessage obj = (ObjectMessage) message; -----------》 强转的类型不同TextMessage msg = (TextMessage) message;
Order order = (Order) obj.getObject();
}
 
 
三 、 测试类
/**
* 发送一个对象到消息队列中
*/
@Test
public void sendObjToMq() {
ObjectMessageProducer objProducer = new ObjectMessageProducer();
Order order = new Order();
order.setInfo("33333");
order.setOrderId(1L);
order.setPrice(600f); objProducer.sendObjToMq(order); ----------》发送一个对象 }
/**
* 从消息队列中取一个对象信息
*/
@Test
public void receiveObjFromMq() { ObjectMessageConsumer objConsumer = new ObjectMessageConsumer();
objConsumer.recieverObjFromMq("aaa"); }
 
 
六 、 ActiveMq的监听器
就是把第六步给改了,生成一个受监听的Message对象
consumer.setMessageListener(new MessageListener() {

                      @Override
public void onMessage(Message message) {
// TODO Auto-generated method stub
//将消息载体转成对象消息载体
ObjectMessage objMessage = (ObjectMessage) message;
try { //在对象消息载体中获取对象
Order order = (Order) objMessage.getObject();
System.out.println("id:" + order.getOrderId() + "价格:" + order.getPrice() + "详细信息" + order.getInfo()); } catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
});
 
    
 
 
 

ActiveMQ处理Message(String -javabean)的更多相关文章

  1. ActiveMQ Advisory Message

    http://activemq.apache.org/advisory-message.html ActiveMQ broker 内部维持了一些 topic,保存了一些系统信息,客户端可以订阅这些 t ...

  2. 分布式-信息方式-ActiveMQ的Message dispatch高级特性之(指针) Message cursors

    Message dispatch高级特性之 Message cursors概述            ActiveMQ发送持久消息的典型处现方式是:当消息的消费者准备就绪时,消息发送系统把存储的 消息 ...

  3. ActiveMQ(li)

    一.ActiveMQ 首先,ActiveMQ不是一个框架,它不是struct,webx,netty这种框架,它更像是tomcat服务器,因为你使用它之前必须启动它,activeMQ和JMS的关系有点类 ...

  4. 工业物联网或系统集成中应用消息队列(ActiveMQ,C#的demo)的场景全面分析

    1.[连载]<C#通讯(串口和网络)框架的设计与实现> 2.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 2.应用SuperIO(SIO)和开源跨平台物联网框 ...

  5. C++ activemq CMS 学习笔记.

    很早前就仓促的接触过activemq,但当时太赶时间.后面发现activemq 需要了解的东西实在是太多了. 关于activemq 一直想起一遍文章.但也一直缺少自己的见解.或许是网上这些文章太多了. ...

  6. activemq的几种基本通信方式总结

    简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activem ...

  7. ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯

    本文章的完整代码可从我的github中下载:https://github.com/huangbowen521/SpringJMSSample.git 上一篇文章中介绍了如何安装和运行ActiveMQ. ...

  8. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  9. activemq安装与简单消息发送接收实例

    安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost softwa ...

随机推荐

  1. [转]重命名PostgreSQL数据库

    初学PostgreSQL的朋友可能会有这样的疑惑:如何重命名已经建好的数据库?因为PostgreSQL默认的客户端pgAdmin III并没有地方可以让我们去修改某个现有的数据库的名称.遇到这个情况, ...

  2. MAC 上抓取网页数据的工具有哪些?

    我希望能够从网页上, 比如气象局数据, 财经数据等等, 我看到官方提供的数据都比较混乱, 有的是一个php文件, 有的是一个文本, 有的干脆不提供数据, 我想问, Mac上, 用什么工具去抓数据, 以 ...

  3. 【转】python requests库添加自定义cookie的方法

    requests库是个很方便的爬虫,相关文档已经很详细了.不过我今天在爬网页时,有一个网站是在脚本中添加cookie的,但我向requests.cookies里添加cookie费了不少周折.尝试了多个 ...

  4. CMU Database Systems - Storage and BufferPool

    Database Storage 存储分为volatile和non-volatile,越快的越贵越小 那么所以要解决的第一个问题就是,如果尽量在有限的成本下,让读写更快些 意思就是,尽量读写volat ...

  5. mysql批量更新update中的锁表机制

    mysql的行锁是通过索引加载的,即行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁. CREATE TABLE SIMPLE_USER( I ...

  6. QEMU命令配置虚拟机网络的用户模式

    QEMU缺省使用“-net nic-net user”参数为客户机配置网络,提供了一种用户模式( user-mode)的网络模拟.使用用户模式的客户机可以连通宿主机及外部网络.用户模式网络完全由QEM ...

  7. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 0: invalid continuation byte

    需求:python如何实现普通用户登录服务器后切换到root用户再执行命令 解决参考: 代码: def verification_ssh(host,username,password,port,roo ...

  8. expandablelistView 可展开的列表

    这个东西用法基本固定,不知道能不能做三级的展开. 界面代码 <?xml version="1.0" encoding="utf-8"?> <L ...

  9. openresty开发系列26--openresty中使用redis模块

    openresty开发系列26--openresty中使用redis模块 在一些高并发的场景中,我们常常会用到缓存技术,现在我们常用的分布式缓存redis是最知名的, 操作redis,我们需要引入re ...

  10. openresty开发系列24--openresty中lua的引入及使用

    openresty开发系列24--openresty中lua的引入及使用 openresty 引入 lua 一)openresty中nginx引入lua方式 1)xxx_by_lua   ---> ...