一、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. 做动画animation--matplotlib--python2和3通用代码

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_42053726/artic ...

  2. nrm -- 一键切换npm源

    0. 背景 先描述一下没有nrm时我们是怎样使用npm源的 查看npm源地址,终端中输入 npm config list 可以看到npm源 metrics-registry = "https ...

  3. 回声消除(AEC)原理

    一.前言 因为工作的关系,笔者从2004年开始接触回声消除(Echo Cancellation)技术,而后一直在某大型通讯企业从事与回声消除技术相关的工作,对回声消除这个看似神秘.高端和难以理解的技术 ...

  4. 文章后面的QA或FAQ

    QA:question&answer FAQ: Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”

  5. Error-JavaScript-SCRIPT5007: 无法获取未定义或 null 引用的属性“style”

    ylbtech-Error-JavaScript-SCRIPT5007: 无法获取未定义或 null 引用的属性“style” 1.返回顶部 - document.getElementById(&qu ...

  6. C++11使用make_shared的优势和劣势

    Why Make_shared ? C++11 中引入了智能指针, 同时还有一个模板函数 std::make_shared 可以返回一个指定类型的 std::shared_ptr, 那与 std::s ...

  7. Flutter TextField详解

    原文地址:https://www.jianshu.com/p/54419a143d70 实现TextField说简单也简单,说有坑,坑也不小,下面从易到难介绍一下使用 1.最简单的就是无参数调用构造方 ...

  8. iOS popToViewController具体用法

    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIn ...

  9. BladeX部署说明(win7)

    一:安装jdk-8u221-windows-x64 二:安装Nacos,解压nacos-server-1.0.0,运行bin目录下的startup.cmd,成功可以用浏览器访问:localhost:8 ...

  10. 【物联网】传感器+wifi传输+回复+显示

    https://www.jianshu.com/p/cb0274d612b5 https://timgsa.baidu.com/timg?image&quality=80&size=b ...