ActiveMQ 使用文档
一、为什么使用ActiveMQ
在总线的设计中可能会使用到JMS(Java Message Service)通道, Java消息服务(JMS)超越了生产商专有的MOM(Message-Oriented-MiddleWare) API,它为企业消息传递提供了一套API。JMS的目标是提供一个标准API,使用Java语言,以生产商中立的方式来发送和接收消息。JMS API最小化了一个Java编程者应具备的企业消息传递的知识量,来开发复杂消息传递应用程序,而仍能维持一定的跨JMS提供者实现的可移植性。
JMS本身不是一个MOM。它是一套API,抽象了消息传递客户端与MOM间的交互,类似于JDBC抽象了关系型数据库的交互。应用间的通信是通过应用1组织一个JMS消息使用JMS API发送到MOM,应用2通过JMS API接收到该消息进行处理,可以实现对消息同步或异步的处理,在我们的项目中是使用的MOM是ActiveMQ------ 一个开源的消息中间件。
二、总线中使用的ActiveMQ的版本及说明
在总线中使用的ActiveMQ的版本是5.3.0,下载地址是http://activemq.apache.org/download.html,ActiveMQ需要的jdk的版本最低是1.5所以在安装ActiveMQ之前一定确定jdk的版本是1.5之后的,ActiveMQ5.3.0是免安装的下载完之后解压到相应的位置,打开根目录就会看到有以下文件:

图一 ActiveMQ的目录格式
* LICENSE——包含ActiveMQ所使用库的license。
* NOTICE——它包含ActiveMQ使用库的版权信息
* README.txt——新手文档
* webConsole-README.txt——包含使用ActiveMQ Web Conslole的信息。
* activemq-all-5.3.0.jar——包含了ActiveMQ所有内容;方便使用它,在使用activeMQ的地方直接导入这一个jar包就够了。
* bin——包含了ActiveMQ的二进制/可执行文件;启动脚本也在该目录下
* conf——持有ActiveMQ所有配置信息
* data——日志文件和消息持久数据保存在此目录下。
* docs——包含一个简单的index.html文件,它指向ActiveMQ网址
* example——示例;我们将用它来快速测试ActiveMQ
* lib——lib目录持有所有ActiveMQ所需的库
* user-guide.html——启动ActiveMQ和运行示例的简短指南
* webapps——webapps目录持有ActiveMQ web console和一些其它web相关的demo
三、启动并使用ActiveMQ控制台
进入到ActiveMQ\bin目录下找到activemq.bat点击启动activeMQ,正常启动的界面如下:

图二 ActiveMQ正常启动界面
访问http://localhost:8161/admin/index.jsp查看ActiveMQ的管理界面在该界面中可以添加、删除、清空查看队列主题的消息信息以及新建、删除主题和队列等功能,控制台的使用很简单这里不再赘述了。

图三 ActiveMQ控制台
四、从一个简单的实例看ActiveMQ的使用
该例子是一个简单的发送消息的例子:例子向ieslab.chen发送一条TextMessage消息,消息的内容是Hello world!借助控制台看一下:点击控制台上的Queue链接,然后可以看到一个name下面有个ieslab.chen的队列如图四所示:

图四 通过控制台查看消息
控制台中显示的Name:是队列的名字,Number Of Pending Messages是等待消费的消息的数量,Number Of Consumers是消费者的数量,Messages Enqueued是队列中的消息,Messages Dequeued是被消费的消息的数量,Views可以查看可以指定一个消费者,Operation指定了对该队列的操作:发送、清空、删除。点击这个队列的名字jms.ieslab.chen就可以看到这个队列中的消息点击某个消息就可以看到消息的详细信息如图五所示:

图五 利用控制台查看消息的详细信息
以下是实例中用到的代码:(注意*prop.setProperty(Context.PROVIDER_URL, "tcp://localhost:61616");//172.20.9.39这个地方一定要注意在activeMQ的根目录下有个conf文件夹下的activemq.xml是设置了activeMQ的详细信息下面有个关于连接的配置如下代码:<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616"/>
<!--transportConnector name="openwire1" uri="tcp://0.0.0.0:61617"/ -->
</transportConnectors>
如果你的activemq.xml中也设置的tcp连接是localhost那你不能在代码中使用你自己的ip也就是说不能写成这样prop.setProperty(Context.PROVIDER_URL, "tcp:// 172.20.9.39:61616")(172.20.9.39是我的ip))。
package com.ieslab.sendmessage;
import java.util.Properties;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
public class sendmsg {
private QueueSession sendSession;
private QueueSender sender;
private QueueConnection connection;
public sendmsg() {
try {
/* 设置连接属性 */
Properties prop = new Properties();
prop.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.activemq.jndi.ActiveMQInitialContextFactory");
prop.setProperty(Context.PROVIDER_URL, "tcp://localhost:61616");//172.20.9.39
// queue. topic. 必须要加的但是他的key是LoanRequestQ也就是传递给main函数的参数
prop.setProperty("queue.ieslab.chen", "jms.ieslab.chen");
prop.setProperty("userName", "admin");
prop.setProperty("password", "hello");
/* 初始化上下文 */
Context ctx = new InitialContext(prop);
/* 创建连接工厂 */
QueueConnectionFactory Factory = (QueueConnectionFactory) ctx
.lookup("QueueConnectionFactory");
/* 创建连接 */
QueueConnection qconnection = Factory.createQueueConnection();
qconnection.start();
QueueSession qsession = qconnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) ctx.lookup("ieslab.chen");
QueueSender qsender = qsession.createSender(queue);
/* 初始化类 */
this.connection = qconnection;
this.sendSession = qsession;
this.sender = qsender;
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
public void messagesend(String text) {
try {
TextMessage msg = sendSession.createTextMessage(text);
//sender.setDisableMessageTimestamp(false);
//msg.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);
sender.send( msg );
/* 发送对象类 */
// Order order = new Order();
// ObjectMessage objmsg = sendSession.createObjectMessage();
// objmsg.setObject((Serializable) order);
// sender.send(objmsg);
} catch (JMSException jmse) {
jmse.printStackTrace();
System.exit(1);
}
}
// public void test() {
// Order order = new Order();
// ObjectMessage objmsg;
// try {
// objmsg = sendSession.createObjectMessage();
// objmsg.setObject((Serializable) order);
// sender.send(objmsg);
// } catch (JMSException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
// }
private void exit() {
try {
connection.close();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
System.exit(0);
}
public static void main(String[] args) {
try {
sendmsg smsg = new sendmsg();
smsg.messagesend("Hello World!");
} catch (Exception e) {
e.printStackTrace();
}
System.exit(1);
}
}
五、在mule中配置activeMQ
因为mule集成了activeMQ所以在mule中使用activeMQ是非常简单的,只要配置一个activeMQ的连接器那么在你使用jms通道时就会自动使用这个连接器,activeMQ的配置也非常简单如下所示:
<jms:activemq-connector name="jmsConnector"
brokerURL="tcp://localhost:61616" specification="1.1" username="admin"
password="hello">
</jms:activemq-connector>
不要忘记在你的mule的项目中activeMQ的jar包,这样就可以自由使用jms通道中的队列和主题了,所有的消息、队列和主题都可以通过activeMQ的控制台进行管理。
六、总结
本文档只是简单的描述了一下activemq的安装和使用以及在mule中的配置,如果想了解更详细的知识可以参考ActiveMQ in Action一书。
ActiveMQ 使用文档的更多相关文章
- JMS ActiveMQ研究文档
1. 背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务 ...
- ActiveMQ配置文档
本文介绍一对一.一对多.持久化.非持久化消息配置方式 一.创建项目 导入jar 二.创建MQ.xml <!-- 配置JMS连接工厂 --> <bean id="connec ...
- ActiveMQ+Zookeeper集群配置文档
Zookeeper + ActiveMQ 集群整合配置文档 一:使用ZooKeeper实现的MasterSlave实现方式 是对ActiveMQ进行高可用的一种有效的解决方案, 高可用的原理:使用Zo ...
- 分布式架构--Dubbo项目实战学习文档
安装Dubbo注册中心(Zookeeper-3.4.6) 安装Dubbo管理控制台 Tomcat中部署web应用 ---- Dubbo服务消费者Web应用war包的部署 Dubbo监控中心的介绍与简易 ...
- MQ选型对比文档
几种MQ产品说明: ZeroMQ : 扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装,如果我们做为消息队列使用,需要开发大量的代码 RabbitMQ ...
- SpringBoot文档
一.Spring Boot 入门 1.Hello World探究 1.POM文件 1.父项目 <parent> <groupId>org.springframework.b ...
- Spring Boot属性文件配置文档(全部)
This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...
- Spring Boot文档
本文来自于springboot官方文档 地址:https://docs.spring.io/spring-boot/docs/current/reference/html/ Spring Boot参考 ...
- 2022最新IntellJ IDEA的zheng开发部署文档
目录 前景提示 一.环境整合 构建工具(参考工具部署方式) 二.git 导入编译器 三.模块描述浅析 四.配置文档 1.总配置 2.数据库配置 3.密码设置 4.配置建议 五.在IDEA中执行MySQ ...
随机推荐
- RK3288 双屏异显时,触摸屏(USB接口)无反应
系统版本:RK3288 android 5.1 设备同时有两个lcd,主屏是mipi接口,带有触摸屏,触摸屏是usb接口,副屏是hdmi接口,没有触摸屏,正常情况下,两个lcd显示相同内容,触摸屏一切 ...
- 完美版js金钱正则表达式校验
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8& ...
- awk:NF-NR-OFS-ORS-RS等参数
ARGC 命令行参数个数ARGV 命令行参数排列ENVIRON 支持队列中系统环境变量的使用FILENAME awk浏览的文件名FNR 浏览文件的记录数FS 设置输入域分隔符,等价于命令行 -F选项N ...
- bzoj2184: 任意图的匹配
Description 每天都要考,每天都要讲,大家注意力都集中不起来了,每天听解题报告时都有人交头接耳(也包括我,呵呵).这样做大大的影响的学习效率(可能吧).于是,有些好奇心重的同学就开始研究,怎 ...
- 【kubernetes】kubectl logs connection refused
因为启动dashboard报CrashLoopBackOff错误,尝试使用logs去查看日志,结果报错,错误如下: [root@localhost ~]# kubectl -s http://192. ...
- error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
编译出现如下错误: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such ...
- 0908期 HTML 基础 第一讲
HTML 常用属性.标签以及表格 HTML 超文本标记语言的简称. <html> --开始标签 <head> 网页上的控制信息 <title>页面标题< ...
- 【HDU】1520 Anniversary party(树形dp)
题目 题目 分析 带权值的树上最大独立集 代码 #include <bits/stdc++.h> using namespace std; ; int a[maxn], n, fa[max ...
- 【洛谷】P1095 守望者的逃离(递推)
题目描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会 ...
- Windbg查看w3wp进程占用的内存及.NET内存泄露,死锁分析
https://www.cnblogs.com/startpoint/p/4194052.html https://www.cnblogs.com/lyl6796910/p/7613664.html ...