一、为什么使用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——包含使用ActiveMQWeb 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控制台
进入到ActiveMQin目录下找到activemq.bat点击启动activeMQ,正常启动的界面如下:
图二ActiveMQ正常启动界面
访问http://localhost:8161/admin/index.jsp查看ActiveMQ的管理界面在该界面中可以添加、删除、清空查看队列主题的消息信息以及新建、删除主题和队列等功能,控制台的使用很简单这里不再赘述了。
图三ActiveMQ控制台
四、从一个简单的实例看ActiveMQ的使用
该例子是一个简单的发送消息的例子:例子向ieslab.chen发送一条TextMessage消息,消息的内容是Hello world!借助控制台看一下:点击控制台上的Queue链接,然后可以看到一个name下面有个ieslab.chen的队列如图四所示:
图四 通过控制台查看消息
控制台中显示的Name:是队列的名字,Number OfPending 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"/>
<!--transportConnectorname="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))。
---------------------
作者:瓜瓜东西
来源:CSDN
原文:https://blog.csdn.net/cgwcgw_/article/details/17750493
版权声明:本文为博主原创文章,转载请附上博文链接!