从网上找了一些代码,拼接了拼接,作为练习。运行项目时首先要把activemq启动了。
Sender.java
package jms;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
public class Sender {
private JmsTemplate jmsTemplate;
public void setJmsTemplate(JmsTemplate jmsTemplate){
this.jmsTemplate=jmsTemplate;
}
public void send(final String text){
jmsTemplate.send(new MessageCreator(){
public Message createMessage(Session arg0) throws JMSException {
System.out.println("---Send: "+text);
return arg0.createTextMessage(text);
}
});
}
}
SendMessage.java是一个servlet,下面只写方法
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ApplicationContext ac=new ClassPathXmlApplicationContext("bean-jms.xml");
Sender sender=(Sender)ac.getBean("sender");
String text=request.getParameter("text");
sender.send(text);
response.encodeRedirectURL("/index.jsp");
System.out.println("*******************");
}
SimpleMessageListener.java
package jms;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class SimpleMessageListener implements MessageListener {
public void onMessage(Message message) {
if(message instanceof TextMessage){
TextMessage text=(TextMessage)message;
try {
System.out.println("---Receiver: "+text.getText().toString());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
配置文件bean-jms.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- 配置Jms模板 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="defaultDestination" ref="destination"/>
<property name="receiveTimeout" value="10000"/>
</bean>
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616" />
</bean>
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="jms.test" /><!--jms.test是你自己自定义的queue队列名-->
</bean>
<bean id="sender" class="jms.Sender">
<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
<bean id="receive" class="jms.Receiver">
<property name="jmsTemplate" ref="jmsTemplate"/>
<property name="destination" ref="destination"/>
</bean>
<bean id = "messageListener" class = "jms.SimpleMessageListener"/>
<bean id = "listenerContainer" class = "org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name = "connectionFactory" ref = "connectionFactory"/>
<property name = "destination" ref = "destination"/>
<property name = "messageListener" ref="messageListener"/>
<property name = "maxConcurrentConsumers" value = "10"/>
<property name = "idleTaskExecutionLimit" value = "2"/>
</bean>
</beans>
测试页面index.jsp
<form action="<%=basePath %>SendMessage" method="post">
<table>
<tr>
<td>
<input type="text" name="text">
</td>
</tr>
<tr>
<td>
<input type="submit" value="Submit">
</td>
</tr>
</table>
</form>
在jsp页面填入数据,就会看到后台打印的数据。比如输入hello hao are you
myeclipse后台打印如下,在activemq平台也会看到jms.test队列这一行发送数据一条,接收数据一条
---Send: hello hao are you
*******************
---Receiver: hello hao are you
其实发送消息和监听的程序可以放到不同的项目上,我们以后开发的时候可以用到。
我也正在学习,还请多多指点。