接触了一下JMS,稍作记录方便以后回来看,感觉用Spring封装的JMSTemplate在配置上有点麻烦,但在程序中调用就非常简单了。
1.首先配置JBoss,在JBosshome下找到jbossmq-destinations-service.xml,在最下面加入
<!-- Register User Send/Receive Queue -->
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=registerUserQueue">
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
<!-- Register User Send/Receive Topic -->
<mbean code="org.jboss.mq.server.jmx.Topic"
name="jboss.mq.destination:service=Topic,name=registerUserTopic">
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
主要是Jboss发送消息的两种模式 主题 和 队列模式
2.在Spring配置文件中需要配置
<!-- jndi获得 jms资源的上下文 -->
<bean id="jndiTemplate"
class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">
org.jnp.interfaces.NamingContextFactory
</prop>
<prop key="java.naming.provider.url">localhost</prop>
<prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
</props>
</property>
</bean>
<!-- jms连接工厂 -->
<bean id="jmsConnectionFactory"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<property name="jndiName">
<value>XAConnectionFactory</value>
</property>
</bean>
<!-- jms模板 -->
<bean id="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate102">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="defaultDestination" ref="destination" />
<property name="pubSubDomain">
<value>true</value>
</property>
<!-- 等待消息的时间(ms) -->
<property name="receiveTimeout">
<value>30000</value>
</property>
</bean>
<!-- 定义jms发收消息 -->
<bean id="destination"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<!-- 定义jms发收消息,这里我用主题模式来发消息 -->
<property name="jndiName">
<value>topic/registerUserTopic</value>
</property>
</bean>
<!-- 消息发布者 -->
<bean id="msgProducer" class="com.xugang.demo.jms.MessageProducer">
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
<!-- 消息接收者 -->
<bean id="msgConsumer" class="com.xugang.demo.jms.MessageConsumer">
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
3.最后写 消息发布者 和消息接收者
消息接收者直接调 jmsTemplate.receive("registerUserTopic");收消息
消息发布者调用 jmsTemplate.send(new MessageCreator(){。。。。});来发消息
其中MessageCreator实现了将JavaBean转换到MapMessage(顾名思义以Map的形式来保存Javabean,将JavaBean中的各属性和对应的Value对应起来)
程序是依赖JBoss的,在运行程序前需要启动JBoss服务,花了一下午总算做出了一个Demo,
为以后进一步的应用打个基础吧。