2012-02-17 35 views
2

我有一臺運行在我的服務器上的Spring MVC web應用程序。最近我想增加一項功能來通知任何登錄用戶他們的角色已經改變,所以他們可以註銷並重新登錄。使用JMX/JMS將消息廣播到Web應用程序的所有會話?

我想過使用JMX,所以做了一個小測試,它工作正常,除了它沒有廣播消息。例如,如果我有2個登錄人員,則只有1個人正在接收該消息。

所以我的問題是,是否有可能使用JMX向Web應用程序的所有實例(活動會話)廣播消息?

編輯 - 使用JMS

所以我跟JMS努力,現在,這裏是我的配置文件:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> 

<bean id="connectionFactory" 
     class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="tcp://localhost:61616"/> 
</bean> 
<bean id="msgDestination" 
     class="org.apache.activemq.command.ActiveMQTopic"> 
    <constructor-arg value="userToLogout.topic"/> 
</bean> 
<bean id="jmsTemplate" 
     class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="connectionFactory"/> 
    <property name="pubSubDomain" value="true"/> 
    <property name="receiveTimeout" value="10000"/> 
</bean> 
<bean id="userNotifier" 
     class="com.cap.messaging.UserNotifier"> 
    <property name="destination" ref="msgDestination"/> 
    <property name="jmsTemplate" ref="jmsTemplate"/> 
</bean> 
<bean id="userNotificationListener" 
     class="com.cap.messaging.UserNotificationListener"> 
</bean> 
<bean 
    class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    <property name="destinationName" value="userToLogout.topic" /> 
    <property name="messageListener" ref="userNotificationListener" /> 
</bean> 

這個心不是現在的工作。但是,如果我將ActiveMQTopic更改爲ActiveMQQueue,它就可以工作。我在這裏錯過了什麼,並會這樣工作?

+0

如果有人對解決方案感興趣,我只是添加了一個Application範圍bean,並且模擬了發佈 - 訂閱通信。有點伎倆。 – Elio 2012-02-20 12:47:20

回答

1

我認爲簡短的答案是否定的。 JMX是一個通過TCP/IP套接字使用RMI的單連接API。您可以做的最好的做法是將所有實例串行單播或使用線程,並通過多個JMX客戶端連接並行發送到所有Web應用程序會話。

+0

那麼用JMS可以嗎?與JMS我可以創建主題。我正在嘗試使用atm,但創建主題似乎暫時不起作用。 – Elio 2012-02-17 14:51:25

+0

確定您可以使用JMS並讓所有服務器訂閱。有很多不同的遠程處理軟件包可以使用。然而,您需要提出另一個問題,然後提出有關細節的問題。 – Gray 2012-02-17 14:54:31

+0

感謝您的快速回答,我編輯了我的問題,基本上我感興趣的是通知方面。我已經想到了一個合理的選擇,比如一個應用程序範圍的bean,它包含了應該被註銷的用戶列表,但是我將它作爲最後的手段。 – Elio 2012-02-17 14:59:34

相關問題