ActiveMQ的使用笔记(基本实现原理)
具体原理不进行深入,会用就好。
第一:当然是先安装ActiveMQ,选择操作系统位数,安装成功以后,输入网址http://ip:8161/admin/,会出现相关页面,账号密码都是admin。在这个页面上可以看到消息队列的信息。consume和send使用较多。

第二:创建produce和consume。
基本的原理都是一样的,JMS(java message send)的13个规范之一,消息中间件的一些组件拼接连通就行了。具体参考代码注释。
容易出错的地方是消息的格式。
这里有点对点模式和发布/订阅模式。我使用的时候是在初始化ContextListener的时候初始化ActiveMQ,然后并重载了onMessage事件(MessageConsumer里面定义了一些接口,可以去使用),这样就不需要一直主动去询问提供者了,队列中有消息时会自动触发该事件。
参考代码:
package com.enjoyor.soa.traffic.server.nmim.listener; import javax.jms.Message;
import javax.jms.MessageListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import com.enjoyor.soa.traffic.server.nmim.util.ActiveMQUtil;
import com.enjoyor.soa.traffic.server.nmim.util.Constants;
import com.enjoyor.soa.traffic.server.nmim.util.InitConfig;
import com.enjoyor.soa.traffic.server.nmim.service.inner.MqManageService;
import com.enjoyor.soa.traffic.util.frame.spring.SpringContextUtil;
import com.enjoyor.soa.traffic.util.helper.LoggerHelper;
import com.enjoyor.soa.traffic.util.pojo.ResultPojo; /**
*
* ContextListener
* 2016-11-25
*
*/
public class ContextListener implements ServletContextListener
{
public void contextDestroyed(ServletContextEvent arg0)
{
System.out.print("contextDestroyed");
} MqManageService manageService; public void contextInitialized(ServletContextEvent arg0)
{
System.out.print("contextInitialized");
String MQNAME = "";
InitConfig initConfig = new InitConfig();
initConfig.init();
MQNAME = InitConfig.confCache.get(Constants.MQNAME).toString();
ActiveMQUtil.getInstance().receive("queue://" + MQNAME, new MessageListener() {
@Override
public void onMessage(Message msg) {
try {
if(null==manageService){
manageService = (MqManageService) SpringContextUtil.getBean("mqManageService");
manageService.setListDic();
}
//MqManageService manageService = (MqManageService) SpringContextUtil.getBean("mqManageService");
ResultPojo pojo = manageService.getMqMsg(msg);
if(!pojo.getappCode().equals("0")){
LoggerHelper.LOG.error("接收失败"+pojo.getResultList());
}
} catch (Exception e) {
LoggerHelper.LOG.error(e);
} }
});
} } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package com.enjoyor.soa.traffic.server.nmim.util; 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.Session;
import javax.jms.TextMessage; import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator; public class ActiveMQUtil { private ActiveMQUtil(){ }
private JmsTemplate jmsTemplate;
public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
} private static ActiveMQUtil mq;
public static ActiveMQUtil getInstance(){
if(mq==null){
ApplicationContext context = new ClassPathXmlApplicationContext("activemq.xml");
mq=(ActiveMQUtil)context.getBean("activeMQUtil");
}
return mq;
} public Destination getDestination(String name){
Destination dest=null;
boolean pubSubDomain=name.toLowerCase().indexOf("topic://")==0;
String destName = name.replaceFirst("(?i)(topic|queue)://", "");
if(pubSubDomain){
dest= new ActiveMQTopic(destName);
}else{
dest= new ActiveMQQueue(destName);
}
return dest;
} public String receive(Destination dest) {
try {
TextMessage txtmsg = (TextMessage) getInstance().getJmsTemplate().receive(dest);
if(null!=txtmsg)return txtmsg.getText();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String receive(String name) {
return receive(getDestination(name));
}
public Connection receive(Destination dest,MessageListener listener){
try{
ConnectionFactory factory = getInstance().getJmsTemplate().getConnectionFactory();
Connection connection = factory.createConnection();
connection.start(); final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(dest);
consumer.setMessageListener(listener);
return connection;
} catch (JMSException e) { }
return null;
}
public Connection receive(String name,MessageListener listener){
return receive(getDestination(name),listener);
} public void send(Destination dest,final String msg){
try {
jmsTemplate.send(dest,new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
TextMessage message = session.createTextMessage(msg);
return message;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public void send(String name,final String msg){
send(getDestination(name),msg);
} }
注意将ContextListener初始化时注入spring容器中。任何类都需要一个入口,只有进入spring容器中,在jvm中被调用,才有存在的价值。
ActiveMQ的使用笔记(基本实现原理)的更多相关文章
- Python源代码剖析笔记3-Python运行原理初探
Python源代码剖析笔记3-Python执行原理初探 本文简书地址:http://www.jianshu.com/p/03af86845c95 之前写了几篇源代码剖析笔记,然而慢慢觉得没有从一个宏观 ...
- 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试
机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
- Sqlite学习笔记(四)&&SQLite-WAL原理
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...
- Sqlite学习笔记(四)&&SQLite-WAL原理(转)
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...
- 分布式计算框架学习笔记--hadoop工作原理
(hadoop安装方法:http://blog.csdn.net/wangjia55/article/details/53160679这里不再累述) hadoop是针对大数据设计的一个计算架构.如果你 ...
- 读书笔记|Windows 调试原理学习|持续更新
关于调试方面的学习笔记,主要来源于<软件调试>的读书笔记和梦织未来论坛的视频教程 1.调试器使用一个死循环监听调试信息. DebugActiveProcess(PID);while(TRU ...
- Linux实战教学笔记15:磁盘原理
第十五节 磁盘原理 标签(空格分隔): Linux实战教学笔记 1,知识扩展 非脚本方式的一条命令搞定批量创建用户并设置随机10位字母数字组合密码. 1.1 sed的高级用法 [root@chensi ...
- Linux实战教学笔记16:磁盘原理
第十五节 磁盘原理 标签(空格分隔): Linux实战教学笔记 1,知识扩展 非脚本方式的一条命令搞定批量创建用户并设置随机10位字母数字组合密码. 1.1 sed的高级用法 [root@chensi ...
随机推荐
- 一个网页抓取的类支持get+post+cookie存储
前段时间提取了一个工具类,分享给大家: <?php class httpconnector { private $curl; private $cookie; private $kv; func ...
- VMwareTools 安装(VMware Player)
1. VMare Tools 按钮是灰化的,需要对虚拟机做如下设置:(在虚拟机没有启动的状态下进行) 1)Player(P)->管理->虚拟机设置->CD/DVD 选择:使 ...
- CentOS 7.0下配置MariaDB数据库
刚刚配置了下CentOS 7.0版本的服务器,配置数据库时发现# mysql_secure_installation命令用不了,之后网上查了一下发现CentOS 7.0版本用MariaDB替换了mys ...
- Ajax请求中的Redirect()
页面中有一个IsLogin()方法,用以判断该请求的触发者是否登录,如果登录了,则执行查询操作,如果没有登录,则Redirect()至登录界面 页面使用了较多的Ajax请求来获取数据,而在Ajax请求 ...
- NGUI事件监听之UIEventListener的使用
NGUI的事件绑定可以使用 UIButtonMessage 在一个游戏对象上添加Button Message组件: 在Button Message组件上添加要通知的游戏对象上所挂载的脚本的方法 Tar ...
- SQL,LINQ,Lambda语法对照图(转载)
如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...
- Lambda表达式动态拼接(备忘)
EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句 分类: C# Lambda/Linq Entity Framework 2013-05-24 06:58 ...
- php解析一个url
$url = "http://shopnc.localhost/shop/index.php?act=goods&op=index&goods_id=25220"; ...
- iostat监控磁盘io
1.安装#yum install sysstat 2.启动#/etc/init.d/sysstat start 3.自启动#checkfig sysstat 4.基本使用#iostat -k 2每两秒 ...
- Thinking in Java——笔记(3)
Operator Using Java operators Some operators change the value of an operand. This is called a side e ...