我正在为订阅特定事件的所有用户子集开发推送通知.用户使用以下格式订阅RabbitMQ中的主题:user-id.event-type.id.我使用Spring Websocket,Stomp,RabbitMQ和前端SockJS和Angular JS.应通知用户有关事件的所有操作(注释等,日期更改).
到目前为止我们有什么:
首先,我通过REST webservice端点进行身份验证,并将我的令牌放到Cookie中.然后我们连接到websocket.用户订阅主题(/topic/user-45.meeting.1235)并获得通知.但我的问题是有些用户没有收到通知.对于第二个用户,由于某种原因,未在RabbitMQ中创建队列.谁知道为什么?
这是我在Spring applicationContext.xml中的代理设置:
<websocket:message-broker application-destination-prefix="/app">
<websocket:stomp-endpoint path="/stomp">
<websocket:sockjs/>
</websocket:stomp-endpoint>
<websocket:stomp-broker-relay relay-host="localhost" relay-port="61613" system-login="guest" system-passcode="guest" prefix="/queue, /topic"/>
</websocket:message-broker>
Run Code Online (Sandbox Code Playgroud)
这是通过Sockjs订阅的方式:
var ws = new SockJS('http://' + location.host + path);
var stompClient = Stomp.over(ws);
stompClient.connect({
username: '',
password: '',
host: '/'
}, function () {
stompClient.subscribe('/topic/user-45.meeting.' + obj.id,
function (message) {
console.log(message);
}, {
persistent: true
});
});
Run Code Online (Sandbox Code Playgroud)
如果我们在SUBSCRIBE帧中指定唯一的Id字段,它会为每个用户创建唯一的队列.是这样的吗?
我使用Spring,Spring-Websocket,STOMP作为我的应用程序,RabbitMQ作为代理.我需要将通过RabbitMQ传递的所有消息记录到Postgresql表中.我知道我可以在Spring编写@MessageMapping并在那里登录,但我的问题是有些客户端通过MQTT协议直接与RabbitMQ通信,Spring还不支持它(https://jira.spring.io/browse/SPR -12581).此外,浏览器客户端使用STOMP协议通过Spring与RabbitMQ进行通信.
RabbitMQ允许使用Firehose跟踪器跟踪所有消息.如何从Spring正确收听amq.rabbitmq.trace主题?或者我是否需要将单独的Java应用程序编写为消费者?
我正在做强制布局,在事件点击我添加新节点并按行连接.但是线重叠了节点.为什么?我的代码显示为http://jsfiddle.net/WRGtL/
function click(d) {
if (d3.event.defaultPrevented) return; // ignore drag
//alert("clicked");
var d = {id:"d"};
nodes.push(nodeId[index]);
if(index==0)
links.push({source: a, target: nodeId[index]});
else
links.push({source: nodes[1], target: nodeId[index]});
index++;
start();
}
Run Code Online (Sandbox Code Playgroud)