ActiveMQ入门级 + 后台向前台传递消息,包括前台接收消息
废话不多说!
Spring+ActiveMQ 的代码包在这里 点击打开链接 http://download.****.net/download/qq_29080941/10249355
1. 首先下载ActiveMQ服务。本次用的是5.9版本 http://activemq.apache.org/download-archives.html 点击打开链接
标红的activemq-all-5.9.0.jar包是后面代码需要的jar包。
2. 安装完之后打开bin目录,根据自己系统位数 -> 启动服务 activemq.bat
3. 启动完成后的界面是这样的
4. 访问 localhost:8161/admin 进入ActiveMQ管理界面 账号密码默认都是admin
5. 登录进去可以看到 Queue 代表的队列里的消息消费情况 Topic 代表订阅/发送的消息消费情况
6. 到写代码了:
创建一个项目,把activeMQ目录里的jar文件拷到lib下
创建JMSProducer.java :里面注释了很多内容 有讲解 也有其他测试代码
public class JMSProducer {
//发送的消息数量
private static final int SENDNUM = 10;
public static void main(String[] args){
ConnectionFactory connectionFactory;
//实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.1.214:61616");
Connection connection = null;
Session session = null;
Destination destination = null;
MessageProducer producer = null;
try {
connection = connectionFactory.createConnection();
//启动链接
connection.start();
/*
* connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
* 1、true:支持事务
为true时:paramB的值忽略, acknowledgment mode被jms服务器设置为SESSION_TRANSACTED 。
2、false:不支持事务
为false时:paramB的值可为Session.AUTO_ACKNOWLEDGE、Session.CLIENT_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE其中一个。
1、Session.AUTO_ACKNOWLEDGE:为自动确认,客户端发送和接收消息不需要做额外的工作。
2、Session.CLIENT_ACKNOWLEDGE:为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会删除消息。
3、DUPS_OK_ACKNOWLEDGE:允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。在需要考虑资源使用时,这种模式非常有效。
4、SESSION_TRANSACTED
*/
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//创建主题 信息存放地 前台接收的时候也要一致
destination = session.createQueue("ceshi");
// destination = session.createTopic("MyTopic");
//创建发送者对象
producer = session.createProducer(destination);
//设置持久化 PERSISTENT持久化 NON_PERSISTENT非持久化
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//发送消息
sendMessage(session, producer);
/* 这里注释掉了 由下面静态方法发送消息的内容
//创建消息
textMessage = session.createTextMessage("abc");//发送
producer.send(textMessage);*/
// 提交session 关闭连接
session.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发送消息
* @param session
* @param messageProducer 消息生产者
* @throws Exception
*/
public static void sendMessage(Session session,MessageProducer messageProducer) throws Exception{
for (int i = 0; i < 1; i++) {
//创建一条文本消息
TextMessage message = session.createTextMessage("下班通知" +i);
System.out.println("发送消息:Activemq 发送消息" + i);
//通过消息生产者发出消息
messageProducer.send(message);
}
}
}
-------------------------- |
7. 在页面上用的stomp.js 来接受消息
引入stomp.js
<script type="text/javascript">
var url = "ws://localhost:61614/stomp";
var login = "admin";
var passcode = "admin";
//监听的队列
//需要和发送者的发送的队列名称一致否则无法接受到数据
destination = "ceshi";
client = Stomp.client(url);
var onconnect = function(frame) {
client.subscribe(destination, function(message) {
console.log(message.body);
alert(message.body);
});
};
client.connect(login, passcode, onconnect);
</script>
--------------------------------- |