我们已经看到了如何使用ActiveMQ和Maven创建JMS Receiver应用程序 。 让我们看看我们如何类似地创建JMS Sender应用程序 。
web.xml与创建接收器应用程序时使用的相同:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/jmsContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</web-app>
jmsContext.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" xmlns:context="http://www.springframework.org/schema/context"xmlns:jms="http://www.springframework.org/schema/jms" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd"><bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"><property name="brokerURL" value="tcp://localhost:61616" /></bean><!-- <jms:listener-container container-type="default"connection-factory="connectionFactory" acknowledge="auto"><jms:listener destination="testQueue" ref="simpleMessageListener"method="onMessage" /></jms:listener-container> --><!-- To send JMS message --><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory" /><property name="defaultDestinationName" value="testQueue"/></bean><bean id="simpleMessageSender" class="com.jcombat.sender.SimpleMessageSender"><property name="jmsTemplate" ref="jmsTemplate" /></bean>
</beans>
请注意,我们为jmsTemplate和messageSender类添加了两个新bean,它们将使用jmsTemplate实例将消息发送到目标队列。
现在让我们创建一个消息发送者类SimpleMessageSender.java ,它实际上将发送消息:
package com.jcombat.sender;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 SimpleMessageSender {private JmsTemplate jmsTemplate;public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;}public void sendMessage(final String message){ jmsTemplate.send(new MessageCreator(){ @Override public Message createMessage(Session session) throws JMSException { return session.createTextMessage(message); }}); }
}
快完成了 现在,让我们创建客户端类TestClient.java ,它将从jmsContext获取simpleMessageSender bean并通过调用它的sendMessage方法发送一些消息字符串,从而将消息拖放到已配置的队列testQueue中 (如上面显示的jmsContext文件内容中突出显示的那样) 。
package com.jcombat.client;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;import com.jcombat.sender.SimpleMessageSender;public class TestClient {@SuppressWarnings("resource")public static void main(String[] args) throws Exception {ApplicationContext jmsContext = null;jmsContext = new FileSystemXmlApplicationContext("path/to/jmsContext.xml");SimpleMessageSender messageSender = (SimpleMessageSender) jmsContext.getBean("simpleMessageSender");// Create a session within the connection.messageSender.sendMessage("hello");}
}
现在,将TestClient类作为Java应用程序运行。
验证目标队列上的消息
要验证我们通过客户端类发送的消息是否已成功到达目标队列,即testQueue ,登录到Hawtio控制台,并从左侧列出的队列中单击,请单击testQueue链接,该链接显示了以下内容中的testQueue详细信息:主要内容区域如下所示:
现在,单击“浏览”选项卡下列出的消息。 我们可以看到发送弹出窗口的相同消息是:
- 下载源代码
翻译自: https://www.javacodegeeks.com/2015/10/jms-sender-application-with-activemq-and-maven.html