一、为什么使用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一书。

转载于:https://www.cnblogs.com/heidsoft/p/3452954.html

ActiveMQ 使用文档相关推荐

  1. JMS ActiveMQ研究文档

    1. 背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务 ...

  2. ActiveMQ配置文档

    本文介绍一对一.一对多.持久化.非持久化消息配置方式 一.创建项目 导入jar 二.创建MQ.xml <!-- 配置JMS连接工厂 --><bean id="connect ...

  3. activeMQ 安装部署文档

    ## 1.环境 - win7 - jdk1.7,配置环境变量 - apache-activemq-5.14.0-bin.zip - ActiveMQ [下载地址:](http://activemq.a ...

  4. 消息队列 策略_太狠了!京东T8架构师建议吃透这40W字消息队列文档,涨薪15K不是梦...

    "RabbitMQ?""Kafka?""RocketMQ?"...在日常学习与开发过程中,我们常常听到消息队列这个关键词.我也在我的多篇文章 ...

  5. ehcache springboot_阿里内部进阶学习SpringBoot+Vue全栈开发实战文档

    前言 Spring 作为一个轻量级的容器,在JavaEE开发中得到了广泛的应用,但是Spring 的配置烦琐臃肿,在和各种第三方框架进行整合时代码量都非常大,并且整合的代码大多是重复的,为了使开发者能 ...

  6. Spring Boot 3.0.0-M1 Reference Documentation(Spring Boot中文参考文档) 9-16

    9. 数据 Spring Boot与多个数据技术集成,包括SQL和NoSQL. 9.1. SQL数据库 Spring Framework提供扩展支持用于与SQL数据工作,从使用JdbcTemplate ...

  7. 涨薪神作,阿里内部火爆的实战文档和搭建项目笔记,你还怕没有项目可做吗

    前言 认识一个事物最好的方式就是首先去了解它的历史. 随着Spring功能的不断丰富,版本的不断迭代发展,Spring 框架渐渐暴露出了一些问题和弊端.例如太多样板化的配置.繁琐复杂的使用过程等,我们 ...

  8. Hadoop生态圈 大数据文档

    文档基于介绍基于Hadoop的大数据生态圈.介绍下图每一个组件的使用场景及使用方法,同时还对每一个组件有更深入的介绍. 1.Hadoop 1.1 Hadoop简介 2005年,Doug Cutting ...

  9. nginx作用_实战文档:彻底搞懂SpringBoot+微服务+Nginx+Docker+Tomcat

    前言 微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦.你可以将其看作是在架构层次而非获取服务的类上应用很多S ...

最新文章

  1. 数据库设计:关于枚举类型的表结构设计法,个人拙见
  2. 机器学习——大数据与MapReduce
  3. activity切换动画特效
  4. JVM----Java内存区域
  5. Python中DataFrame关联
  6. Swift之深入解析如何实现Promise
  7. Linux 安装 FFmpeg
  8. linux中lsattr命令,在Linux中用chattr和lsattr命令管理文件和目录属性
  9. 最好用的mysql密码忘记的解决方法
  10. 程序员面试金典——17.4无判断max
  11. 软件性能测试操作系统,优秀的系统性能测试软件Sisoft Sandra
  12. 没有ADC的MCU如何实现音频播放?
  13. 云队友丨带不好人,就只能自己干到死
  14. linux autorun.sh,linux autorun使用详解
  15. Spider学习笔记
  16. 联想e570c固态接口支持协议_thinkpad e570c15.6英寸笔记本电脑支持什么固态硬盘接口...
  17. manjaro双屏显示
  18. 有道云笔记的敏捷开发实践——好文收藏吧!【转】
  19. window 使用 Edge/Chrome 调试手机 iOS 的 Safari 浏览器
  20. 【JAVA】一种寻找错误的方法

热门文章

  1. hexo next 主题安装 livere 评论插件
  2. it招聘上说熟悉linux系统,运维入门:细说Linux,做IT必看
  3. java字节对齐原则_C struct 中字节对齐问题
  4. window 自动安装MySQL数据库_windows安装MySQL数据库
  5. layui上传展示进度条
  6. 对jfinal中enjoy的理解
  7. VB 详细枚举指定目录、文件夹文件列表
  8. VB获取超过2G文件的大小
  9. 三星明星机又悲剧了!万元折叠屏,玩不过2天,组团黑屏,蜜汁凸起
  10. 欧莱雅收购AI公司ModiFace,想让自拍照“一键上妆”