ActiveMQ 入门
下载与安装
官方下载地址
解压,运行bin/win[32|64]/activemq[.bat] 启动服务
环境信息
控制台: http://localhost:8161
默认端口:8161
服务地址:
host: localhost
port: 61613
代码例子
基本信息:
语言:Node.js
客户端:stompjs
消息发布者:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| var Stomp = require('stompjs');
var client = Stomp.overTCP('localhost', 61613);
var connectCallback = function(frame) { console.log ('Connected! sending some message'); setInterval(function(){ var date = new Date().toLocaleString(); console.log("sending:"+date); client.send('/queue/FirstQueue', {}, "queue:" + date); client.send('/topic/FirstQueue', {}, "topic:" + date); },10000) };
var errorCallback = function(error){ console.log(error.headers.message); };
client.connect('admin', 'admin', connectCallback,connectCallback);
|
Queue消息消费者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| var Stomp = require('stompjs');
var client = Stomp.overTCP('localhost', 61613);
var connectCallback = function(frame) { var subscription = client.subscribe('/queue/FirstQueue', onMessage); };
var onMessage = function(message){ if (message.body) { console.log("got message with body " + message.body) } else { console.log("got empty message"); } };
var errorCallback = function(error){ console.log(error.headers.message); };
client.connect('admin', 'admin', connectCallback,connectCallback);
|
Topic消息消费者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| var Stomp = require('stompjs');
var client = Stomp.overTCP('localhost', 61613);
var connectCallback = function(frame) { var subscription = client.subscribe('/topic/FirstQueue', onMessage); };
var onMessage = function(message){ if (message.body) { console.log("got message with body " + message.body) } else { console.log("got empty message"); } };
var errorCallback = function(error){ console.log(error.headers.message); };
client.connect('admin', 'admin', connectCallback,connectCallback);
|
注: Queue、Topic消息消费者分别启动两个,再启动消息发布者,观察Queue、Topic消息消费者接收到的消息有什么区别
Queue与Topic的比较
1、JMS Queue执行load balancer语义:
一条消息仅能被一个consumer收到。如果在message发送的时候没有可用的consumer,那么它将被保存一直到能处理该message的consumer可用。如果一个consumer收到一条message后却不响应它,那么这条消息将被转到另一个consumer那儿。一个Queue可以有很多consumer,并且在多个可用的consumer中负载均衡。
2、Topic实现publish和subscribe语义:
一条消息被publish时,它将发到所有感兴趣的订阅者,所以零到多个subscriber将接收到消息的一个拷贝。但是在消息代理接收到消息时,只有激活订阅的subscriber能够获得消息的一个拷贝。
3、分别对应两种消息模式:
Point-to-Point (点对点),Publisher/Subscriber Model (发布/订阅者)
其中在Publicher/Subscriber 模式下又有Nondurable subscription(非持久订阅)和durable subscription (持久化订阅)2种消息处理方式。
总结:Topic就是游戏里的日常任务,只要在线都能接。Queue是小说里的神位传承,只有通过了测试的唯一一个 人才能得到