基于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,无论使用哪种持久化方式 ...
随机推荐
- python module的结构
python有很多module,下面是module的结构图: 拿httplib做例子,httlip module有: 4个class( HTTPConnection,HTTPSConnection,H ...
- [HTTPS] MAN IN THE MIDDLE (MITM)
If you go a public caffee shop, they have free wifi. How could you make sure your infomration cannot ...
- HashMap早知道
第一眼hashmap始终Collection那个地点 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGxmMTIzMzIx/font/5a6L5L2T/f ...
- Linux--------------安装mysql(2)
在 CentOS7 上安装 MySQL5.7 1 通过 SecureCRT 连接到阿里云 CentOS7 服务器: 2 进入到目录 /usr/local/ 中:cd /usr/local/ 3 创建目 ...
- JavaScript无限极菜单
<!DOCTYPE html> <html> <head> <title> New Document </title> <meta c ...
- 跨时钟域设计【二】——Fast to slow clock domain
跨时钟域设计中,对快时钟域的Trigger信号同步到慢时钟域,可以采用上面的电路实现,Verilog HDL设计如下: // Trigger signal sync, Fast clock dom ...
- iOS应用审核的通关秘籍
磨刀不误砍柴工.作为手机应用开发者,你需要向应用商店提交应用审核,迅速通过审核可以让你抢占先机.对苹果iOS应用开发者来说尤其如此.苹果应用商店的审核近乎吹毛求疵,下面这些清单可以让你知道苹果会在哪些 ...
- 理解Objective-c中的copy
说一下深拷贝和浅拷贝的基本概念:a指针指向地址A1, 浅拷贝是创建了一个b指针指向地址A1:深拷贝是创建了一个c指针指向地址A2,A1和A2的地址不同. 我们看到NSObject接口里面是已经声明了c ...
- break continue return 区别
break语句: break语句会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句.由于它是用来退出循环或者switch语句,所以只有当它出现在这些语句时,这种形式的break语句才 ...
- 利用php给图片添加文字水印--面向对象与面向过程俩种方法的实现
1: 面向过程的编写方法 //指定图片路径 $src = '001.png'; //获取图片信息 $info = getimagesize($src); //获取图片扩展名 $type = image ...