activeMQ与spring集成,将activeMQ的配置写到applicationContext.xml中,注意头引用要添加:xmlns:amq="http://activemq.apache.org/schema/core"
xsi:schemaLocation="http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.6.0.xsd“
部分代码的调用使用了spring注解方式,请注意;
activeMQ的配置如下:
1、嵌入式配置activeMQ,tomcat启动时activeMQ服务随之启动;
<amq:broker useJmx="false" persistent="true">
<amq:persistenceAdapter>
<amq:amqPersistenceAdapter directory="d:/amq"/>
</amq:persistenceAdapter>
<amq:transportConnectors>
<amq:transportConnector uri="tcp://localhost:61616"></amq:transportConnector>
</amq:transportConnectors>
</amq:broker>
2、配置连接工厂,生产消息和消费消息都要连接该工厂;
2、配置连接工厂,生产消息和消费消息都要连接该工厂;
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616" />
</bean>
3、配置jmsTemplate模板,
3、配置jmsTemplate模板,
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="receiveTimeout" value="10000"/>
</bean>
4、配置destination;
以上为activeMQ在applicationContext.xml中的简单配置;以下说一下如何发送和接收消息;
使用注解方式将destination和jmsTemplate注入SendMessage类;
发送消息代码:
import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;
@Service("sendMessage")
public class SendMessage {
@Resource
private JmsTemplate jmsTemplate;
@Resource
private Destination destination;
public void send(){
MessageCreator messageCreator = new MessageCreator(){
public Message createMessage(Session session){
TextMessage message = null;
try {
message=session.createTextMessage("hello,I'm activeMQ");
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return message;
}
};
this.jmsTemplate.send(this.destination, messageCreator);
}
}
接收消息类,实现MessageListener接口,并实现onMessage方法;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
@Service
public class GetMessage implements MessageListener{
public void onMessage(Message arg0) {
TextMessage message = (TextMessage) arg0;
try {
System.out.println(message.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以上为全部代码,在需要发送消息的地方调用SendMessage类中的send方法就会在控制台上看到输入”Hello,I'am activeMQ“;说明发送消息成功,自动接收消息也成功了;
以上只是简单的配置应用,欢迎各位大虾指点不足。谢谢!
4、配置destination;
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="jms-test-queue" />
</bean>
5、配置监听,消费消息方自动接收消息;
<bean id="jmsContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="destination" />
<property name="messageListener" ref="getMessage" /> //自定义监听类,
<property name="sessionTransacted" value="true"/>
</bean>
以上为activeMQ在applicationContext.xml中的简单配置;以下说一下如何发送和接收消息;
使用注解方式将destination和jmsTemplate注入SendMessage类;
发送消息代码:
import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;
@Service("sendMessage")
public class SendMessage {
@Resource
private JmsTemplate jmsTemplate;
@Resource
private Destination destination;
public void send(){
MessageCreator messageCreator = new MessageCreator(){
public Message createMessage(Session session){
TextMessage message = null;
try {
message=session.createTextMessage("hello,I'm activeMQ");
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return message;
}
};
this.jmsTemplate.send(this.destination, messageCreator);
}
}
接收消息类,实现MessageListener接口,并实现onMessage方法;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
@Service
public class GetMessage implements MessageListener{
public void onMessage(Message arg0) {
TextMessage message = (TextMessage) arg0;
try {
System.out.println(message.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以上为全部代码,在需要发送消息的地方调用SendMessage类中的send方法就会在控制台上看到输入”Hello,I'am activeMQ“;说明发送消息成功,自动接收消息也成功了;
以上只是简单的配置应用,欢迎各位大虾指点不足。谢谢!