ActiveMQ使用教程
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
ActiveMQ特性列表
1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
4. 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6. 支持通过JDBC和journal提供高速的消息持久化
7. 从设计上保证了高性能的集群,客户端-服务器,点对点
8. 支持Ajax
9. 支持与Axis的整合
10. 可以很容易得调用内嵌JMS provider,进行测试
1:下载 ActiveMQ 5.6.0 Release
http://activemq.apache.org/download.html
放到d盘

2:运行apache-activemq服务:双击 activemq.bat

3:效果

4:所需jar包

5:spring配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://localhost:61616?wireFormat.maxInactivityDuration=0</value>
</property>
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="connectionFactory"/>
</property>
</bean>
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0">
<value>MessageQueue</value>
</constructor-arg>
</bean>
</beans>
这时主要是配置activemq服务信息与实现springjms的对应接口
6:消息产生者
package test;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session; import org.springframework.jms.core.MessageCreator; /**
* 消息产生者
* User: liuwentao
* Time: 12-6-14 上午11:31
*/
public class MyMessageCreator implements MessageCreator {
public int n = 0;
private static String str1 = "这个是第 ";
private static String str2 = " 个测试消息!";
private String str = "";
@Override
public Message createMessage(Session paramSession) throws JMSException {
System.out.println("MyMessageCreator n=" + n);
if (n == 9) {
//在这个例子中表示第9次调用时,发送结束消息
return paramSession.createTextMessage("end");
}
str = str1 + n + str2;
return paramSession.createTextMessage(str);
}
}
7:发送消息方
package test;
import javax.jms.Destination; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
/**
* 发送消息方
* User: liuwentao
* Time: 12-6-14 上午11:29
*/
public class MessageSender extends Thread {
public static void main(String args[]) throws Exception {
String[] configLocations = new String[] {"test/applicationContext.xml"};
ApplicationContext context = new ClassPathXmlApplicationContext(configLocations);
JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate");
Destination destination = (Destination) context.getBean("destination");
for (int i = 1; i < 100; i++) {
System.out.println("发送 i=" + i);
//消息产生者
MyMessageCreator myMessageCreator = new MyMessageCreator();
myMessageCreator.n = i;
jmsTemplate.send(destination, myMessageCreator);
sleep(10000);//10秒后发送下一条消息
}
}
}
8:消息接收方
package test;
import javax.jms.Destination;
import javax.jms.TextMessage; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
/**
* 消息接收方
* User: liuwentao
* Time: 12-6-14 上午11:32
*/
public class MessageReciver{
public static void main(String args[]) throws Exception {
String[] configLocations = new String[] {"test/applicationContext.xml"};
ApplicationContext context = new ClassPathXmlApplicationContext(configLocations); JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate");
Destination destination = (Destination) context.getBean("destination"); TextMessage msg = null;
//是否继续接收消息
boolean isContinue = true;
while (isContinue) {
msg = (TextMessage) jmsTemplate.receive(destination);
System.out.println("收到消息 :" + msg.getText());
if (msg.getText().equals("end")) {
isContinue = false;
System.out.println("收到退出消息,程序要退出!");
}
}
System.out.println("程序退出了!");
}
}
9:测试
运行 发送方和接收方 (顺序随便) main文件,效果如下:


注:即使 接收方启动晚,或者 发送方关闭了, 接收方都会正常接收完所有数据
ActiveMQ使用教程的更多相关文章
- ActiveMQ基础教程----简单介绍与基础使用
概述 ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线.ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多 ...
- ActiveMQ学习教程/2.简单示例
ActiveMQ学习教程(二)——简单示例 一.应用IDEA构建Maven项目 File->New->Module...->Maven->勾选->选择->Next ...
- ActiveMQ学习教程/1.简要介绍与安装
ActiveMQ学习教程(一)——简要介绍与安装 一.名词: 1.JMS:即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的 ...
- ActiveMQ基础教程(四):.net core集成使用ActiveMQ消息队列
接上一篇:ActiveMQ基础教程(三):C#连接使用ActiveMQ消息队列 这里继续说下.net core集成使用ActiveMQ.因为代码比较多,所以放到gitee上:https://gitee ...
- ActiveMQ基础教程(三):C#连接使用ActiveMQ消息队列
接上一篇:ActiveMQ基础教程(二):安装与配置(单机与集群) 安装部署好集群环境:192.168.209.133:61616,192.168.209.134:61616,192.168.209. ...
- ActiveMQ基础教程(二):安装与配置(单机与集群)
因为本文会用到集群介绍,因此准备了三台虚拟机(当然读者也可以使用一个虚拟机,然后使用不同的端口来模拟实现伪集群): 192.168.209.133 test1 192.168.209.134 test ...
- ActiveMQ学习教程
一.activemq安装 官网地址:https://activemq.apache.org/ 具体安装过程不赘述,解压即安装, 二.使用 activemq有queue和topic两种模式, 我们以qu ...
- ActiveMQ基础教程(一):认识ActiveMQ
ActiveMQ是Apache软件基金会所研发开源的消息中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信. 现在的消息队列有不少,RabbitMQ.Kafka.RocketMQ,Z ...
- ActiveMQ基础教程JMS概述
什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息 ...
随机推荐
- 【linux】iptables 开启80端口
经常使用CentOS的朋友,可能会遇到和我一样的问题.开启了防火墙导致80端口无法访问,刚开始学习centos的朋友可以参考下. 经常使用CentOS的朋友,可能会遇到和我一样的问题.最近在Linux ...
- DB 从zl.xml中导入数据库用户名及密码等!
package com.dy.java; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- codeviz安装
1. 下载:http://www.skynet.ie/~mel/projects/codeviz/#download 结合Graphviz工具,使用CodeViz可以生成直观和漂亮的C/C++ ...
- C++(MFC)
C++(MFC) 1.关联变量(与控件关联): (1)一组单选按钮:需要将第一个单选按钮的Group选项设为true,则单选按钮就为一组(组框为标示作用).选中第一个则为0,第二个为1,依次类推(P2 ...
- 自定义PopupWindow 怎么设置PopupWindow的宽度充满全屏宽度
自定义了一个MyPopMenu类,用于上图中的下拉筛选效果的. 但是按照网上有说需要: new PopupWindow(view,getWindowManager().getDefaultDispla ...
- android 设置半透明
对于Button和ImageButton 还有一些View 设置半透明或者透明都是通过 android:background="#b0000000" 这是就是半透明 android ...
- PythonChallenge 2:爬虫和正则表达式
题目: 解题思路:题目里已经说的很清楚了,字符可能在网页的源代码里.右键查看网页源代码,发现其中有一段:find rare characters in the mess below.有些人是直接把下面 ...
- c++ 格式化printf
类型为uint64_t的变量,使用printf进行打印时,需要区分操作系统: 64位系统:使用%ld 32位系统:使用%llu #include<stdio.h>#include < ...
- Ext学习-高级组件介绍
在这一部分的学习中,主要是学习一些比较特殊的组件. 1.图表 2.日历 3.颜色,日期,时间的选择器 4.滑动条 5.各种工具类 参考文档:http://docs.sencha.com/extjs/4 ...
- Windows下JNI执行步骤
问题描述: java JNI使用 问题解决: JNI编写步骤: (1)编写带有native声明的方法的java类 (2)使用javac编译所写的java类,然后使用javah生成扩展名 ...