熟悉下JMS的基础知识,这里不再罗嗦,主要是实战。
配置JMS需要两个对象connectionFactory和 destination。
connectionFactory使用jboss自带的TopicConnectionFactory。
destination可以使用自定义的。
kiral-jms-service.xml 注意:文件名称一定要是-service.xml结尾。这个文件放在部署目录下。
xml 代码
- < xml version = "1.0" encoding = "UTF-8" ?>
- < server >
- < mbean code = "org.jboss.mq.server.jmx.Topic"
- name = "jboss.mq.destination:service=Topic,name=kiralJms" >
- < depends optional-attribute-name = "DestinationManager" > jboss.mq:service = DestinationManager depends >
- < depends optional-attribute-name = "SecurityManager" > jboss.mq:service = SecurityManager depends >
- < attribute name = "SecurityConf" >
- < security >
- < role name = "guest" read = "true" write = "true" />
- < role name = "publisher" read = "true" write = "true" create = "false" />
- < role name = "durpublisher" read = "true" write = "true" create = "true" />
- security >
- attribute >
- mbean >
- server >
发送消息端
bean-jms.xml
xml 代码
- xml version = "1.0" encoding = "GB2312" ?>
- < beans >
- < bean id = "jmsConnectionFactory"
- class = "org.springframework.jndi.JndiObjectFactoryBean" >
- < property name = "jndiName" >
- < value > TopicConnectionFactory value >
- property >
- bean >
- < bean id = "destination"
- class = "org.springframework.jndi.JndiObjectFactoryBean" >
- < property name = "jndiName" >
- < value > topic/kiralJms value >
- property >
- bean >
- < bean id = "jmsTemplate"
- class = "org.springframework.jms.core.JmsTemplate" >
- < property name = "connectionFactory" >
- < bean
- class = "org.springframework.jms.connection.SingleConnectionFactory" >
- < property name = "targetConnectionFactory"
- ref = "jmsConnectionFactory" />
- bean >
- property >
- bean >
- < bean id = "messageProducer"
- class = "jms.MessageProducer" >
- < property name = "template" ref = "jmsTemplate" />
- < property name = "destination" ref = "destination" />
- bean >
- beans >
java 代码
- import javax.jms.Destination;
- import javax.jms.JMSException;
- import javax.jms.Message;
- import javax.jms.Session;
- import org.springframework.jms.core.JmsTemplate;
- import org.springframework.jms.core.MessageCreator;
- /***********************************************************
- * 消息发送者
- *
- * @作者:kiral
- * @日期:2007-7-3
- **********************************************************/
- public class MessageProducer {
- public void send( final String message) {
- template.send(destination, new MessageCreator() {
- public Message createMessage(Session session) throws JMSException {
- Message m = session.createTextMessage(message);
- return m;
- }
- });
- }
- private JmsTemplate template;
- private Destination destination;
- public void setDestination(Destination destination) {
- this .destination = destination;
- }
- public void setTemplate(JmsTemplate template) {
- this .template = template;
- }
- }
发送方调用send方法发送消息。
消息接收者
xml 代码
- < xml version = "1.0" encoding = "UTF-8" ?>
- < beans >
- < bean id = "jmsConnectionFactory"
- class = "org.springframework.jndi.JndiObjectFactoryBean" >
- < property name = "jndiName" >
- < value > TopicConnectionFactory value >
- property >
- < bean >
- < bean id = "destination"
- class = "org.springframework.jndi.JndiObjectFactoryBean" >
- < property name = "jndiName" >
- < value > topic/kiralJms value >
- property >
- < bean >
- < bean id = "messageListener"
- class = "jms.MessageConsumer" >
- < property name = "worksheetService" ref = "worksheetService" > property >
- < bean >
- < bean id = "listenerContainer"
- class = "org.springframework.jms.listener.DefaultMessageListenerContainer" >
- < property name = "connectionFactory" ref = "jmsConnectionFactory" />
- < property name = "destination" ref = "destination" />
- < property name = "messageListener" ref = "messageListener" />
- < bean >
- < beans >
java 代码
- import javax.jms.Message;
- import javax.jms.MessageListener;
- import org.kiral.flow.service.WorksheetService;
- /*******************************************************************************
- * 消息接收者
- *
- * @作者:kiral
- * @日期:2007-7-3
- ******************************************************************************/
- public class MessageConsumer implements MessageListener {
- private WorksheetService worksheetService;
- public WorksheetService getWorksheetService() {
- return worksheetService;
- }
- public void setWorksheetService(WorksheetService worksheetService) {
- this .worksheetService = worksheetService;
- }
- public void onMessage(Message message) {
- System.out.println(message);
- worksheetService.updateRole();
- }
- }
接受方一旦接收到消息,就会打印在控制台。