基于ActiveMQ的点对点收发消息
ActiveMQ是apache的一个开源消息引擎。可以作为即通引擎或者消息中间件引擎。
准备
下载ActiveMQ
http://activemq.apache.org/download.html
进入\bin\win64双击InstallService.bat安装为系统服务。然后启动这个系统服务
访问 http://localhost:8161/admin/queues.jsp 可以看到消息队列列表 账号密码默认就是admin admin,配置在conf/jetty-realm.properties中
然后将根目录下的activemq-all-5.13.2.jar引入项目,就可以进行开发了
首先对ActiveMQ进行简单封装
package activeMQStu; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*;
import java.util.Arrays; /**
* Created by lvyahui on 2016/4/23.
*/
public class ActiveMQServer { private String user;
private String pass;
private String url; private Session session;
private Connection connection;
private ActiveMQConnectionFactory connectionFactory; public ActiveMQConnectionFactory getConnectionFactory() {
return connectionFactory;
} public ActiveMQServer(String user, String pass, String url) throws JMSException {
this.user = user;
this.pass = pass;
this.url = url; this.connectionFactory = new ActiveMQConnectionFactory(this.user, this.pass, this.url);
/*
* 必须指明哪些包的类是可以序列化的
* 否则会报错:ActiveMQ Serializable class not available to broker. Reason: ClassNotFoundException
* 参考:http://activemq.apache.org/objectmessage.html
* */
connectionFactory.setTrustedPackages(Arrays.asList("activeMQStu"));
this.connection = connectionFactory.createConnection();
connection.start();
} public Session getSession() throws JMSException {
if (session == null) {
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
}
return session;
} public Queue createQueue(String name) throws JMSException {
return getSession().createQueue(name);
} public void close() throws JMSException {
if (session != null) {
session.commit();
session.close();
}
if (connection != null) {
connection.close();
}
} }
消息
package activeMQStu; import java.io.Serializable; /**
* Created by lvyahui on 2016/4/23.
*/
public class User implements Serializable { private String username ;
private String password ;
private String salt ; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getSalt() {
return salt;
} public void setSalt(String salt) {
this.salt = salt;
} @Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", salt='" + salt + '\'' +
'}';
}
}
消息生产者
package activeMQStu.queue; import activeMQStu.ActiveMQServer;
import activeMQStu.User;
import org.apache.activemq.command.ActiveMQObjectMessage; import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Queue; /**
* Created by lvyahui on 2016/4/23.
*/
public class UserProducer { private MessageProducer producer; public UserProducer(ActiveMQServer activeMQServer, String queueName) throws JMSException {
Queue queue = activeMQServer.createQueue(queueName);
producer = activeMQServer.getSession().createProducer(queue);
} public void produce(User user) throws JMSException {
ObjectMessage objectMessage = new ActiveMQObjectMessage();
objectMessage.setObject(user);
producer.send(objectMessage);
}
}
发送消息
package activeMQStu; import activeMQStu.queue.UserProducer;
import org.apache.activemq.ActiveMQConnection; import javax.jms.JMSException; /**
* Created by lvyahui on 2016/4/23.
*/
public class ProduceApp {
public static void main(String[] args) throws JMSException {
ActiveMQServer activeMQServer = new ActiveMQServer(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616"
);
UserProducer producer = new UserProducer(activeMQServer,"queue.devlyh");
for(int i =0 ;i < 100;i++){
User user = new User();
user.setUsername("lvyahui".concat(String.valueOf(i)));
user.setPassword("admin888" + i);
user.setSalt("salt"+i);
producer.produce(user);
}
activeMQServer.close();
}
}
运行成功后再页面可以看到有100条消息进入了名字为queue.devlyh的队列中

消息接受者
package activeMQStu.queue; import activeMQStu.ActiveMQServer;
import activeMQStu.User; import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.ObjectMessage; /**
* Created by lvyahui on 2016/4/23.
*/
public class UserConsumer {
private MessageConsumer consumer; public UserConsumer(ActiveMQServer activeMQServer,String queueName) throws JMSException {
this.consumer = activeMQServer.getSession()
.createConsumer(activeMQServer.createQueue(queueName));
} public User consume() throws JMSException {
ObjectMessage objectMessage = (ObjectMessage) consumer.receive();
User user = (User) objectMessage.getObject();
return user;
}
}
接收消息
package activeMQStu; import activeMQStu.queue.UserConsumer;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.JMSException;
import java.util.Arrays; /**
* Created by lvyahui on 2016/4/23.
*/
public class ConsumeApp {
public static void main(String[] args) throws JMSException {
ActiveMQServer activeMQServer = new ActiveMQServer(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616"
); // ActiveMQConnectionFactory factory = (ActiveMQConnectionFactory) activeMQServer.getConnectionFactory(); UserConsumer consumer = new UserConsumer(activeMQServer,"queue.devlyh");
while(true){
User user = consumer.consume();
System.out.println(user);
}
}
}
执行效果如下

基于ActiveMQ的点对点收发消息的更多相关文章
- ActiveMQ利用ajax收发消息
准备工作: 后台需要导包: activemq-all.jar activemq-web.jar jetty-all.jar 如果是maven项目: pom.xml <dependency> ...
- ActiveMQ消息队列从入门到实践(4)—使用Spring JMS收发消息
Java消息服务(Java Message Service ,JMS)是一个Java标准,定义了使用消息代理的通用API .在JMS出现之前,每个消息代理都有私有的API,这就使得不同代理之间的消息代 ...
- ActiveMQ点对点的消息发送案例
公司最近会用MQ对某些业务进行处理,所以,这次我下载了apache-activemq-5.12.0-bin把玩下. 基于练习方便需要,使用Windows的版本. 参考的优秀文章: activemq的几 ...
- 【ActiveMQ】ActiveMQ在Windows的安装,以及点对点的消息发送案例
公司最近会用MQ对某些业务进行处理,所以,这次我下载了apache-activemq-5.12.0-bin把玩下. 基于练习方便需要,使用Windows的版本. 参考的优秀文章: activemq的几 ...
- ActiveMQ学习笔记(5)——使用Spring JMS收发消息
摘要 ActiveMQ学习笔记(四)http://my.oschina.net/xiaoxishan/blog/380446 中记录了如何使用原生的方式从ActiveMQ中收发消息.可以看出,每次 ...
- 通过集群的方式解决基于MQTT协议的RabbitMQ消息收发
在完成了基于AMQP协议的RabbitMQ消息收发后,我们要继续实现基于MQTT协议的RabbitMQ消息收发. 由于C#的RabbitMQ.Client包中只实现了基于AMQP协议的消息收发功能的封 ...
- 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
原文:https://mp.weixin.qq.com/s/lpsQ3dEZHma9H0V_mcxuTw 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 七.集群 ...
- 综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
来源:http://t.cn/RVDWcfe 一.资料文档 Kafka:中.有kafka作者自己写的书,网上资料也有一些.rabbitmq:多.有一些不错的书,网上资料多.zeromq:少.没有专门写 ...
- ActiveMQ的几种消息持久化机制
为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制. ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,无论使用哪种持久化方式 ...
随机推荐
- Http、Socket的区别
转自:http://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html 网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层 ...
- Ubuntu 12.04 安装搜狗输入法
安装指南 Ubuntu / Ubuntu Kylin 14.04 LTS 版本 只需双击下载的 deb 软件包,即可直接安装搜狗输入法. Ubuntu 12.04 LTS 版本 由于 Ubuntu 1 ...
- 使用webview如何做超时判断
在加载网页时给一个timer定时器,规定超时时间,然后再超时时间的方法中提示超时 如果没有超时,则在webview协议中的“加载完成”方法中 取消timer定时器 - (void)openWebVie ...
- js 数组详解(javascript array)
Array Array 对象用于在单个的变量中存储多个值. 构造函数: 1) new Array(); 2) new Array(size); 3) new Array(element0, ...
- 混合模式程序集是针对“v1.1.4322”版的执行时生成的,在没有配置其它信息的情况下,无法在 4.0 执行时中载入该程序集。
看到一个kinect大牛编写的一个水果忍者的体感游戏版本号,让我为自己一直以来仅仅用现有的网页游戏来模拟kinect体感游戏控制感到羞愧,没办法.我还是菜鸟.学习一段后自己模仿星际大战这个游戏.自己写 ...
- RPM vs SRPM
RPM 全名是『 RedHat Package Manager 』简称则为 RPM 啦!顾名思义,当初这个软件管理的机制是由 Red Hat 这家公司发展出来的. RPM 是以一种数据库记录的方式来将 ...
- wins和linux 系统不同编码格式导致的.py执行问题: bad interpreter: No such or file directory
我在win7上用IDLE编写了一个python文件(MyTopo.py),但是用putty传到VM中的ubuntu系统中,用 ./MyTopo方式执行. 显示: /bin/sh^M: bad inte ...
- Maven 私服的使用实战
本日志主要是介绍下面的配置 1. 将内部构件部署到私服 在工程的pom文件中添加下面配置 <distributionManagement> <repository> <i ...
- 使用普通Windows服务创建Quartz.Net服务项目
Quartz.NET 项目地址 http://quartznet.sourceforge.net/ 源码下载地址:Quartz.Net.2.0 首先创建Quartz.Net.2.0解决方案,添加 Wi ...
- sqlserver临时表排序问题
在2005和2008中,如果将有序的记录插入临时表,则从临时表查看出来的记录是有序的(不使用Order by也是有序状态) 但从2012开始,即使插入的记录集是有序的,查看出来的结果变得无序了,需要依 ...