`

Spring Jms入门实例

阅读更多
Spring JMS
        Spring框架提供了一个模板机制来隐藏Java APIs的细节。开发人员可以使用JDBCTemplate和JNDITemplate类来分别访问后台数据库和JEE资源(数据源,连接池)。JMS也不例外,Spring提供JMSTemplate类,因此开发人员不用为一个JMS实现去编写样本代码。接下来是在开发JMS应用程序时Spring所具有一些的优势。

提供JMS抽象API,简化了访问目标(队列或主题)和向指定目标发布消息时JMS的使用。
开发人员不需要关心JMS不同版本(例如JMS 1.0.2与JMS 1.1)之间的差异。
开发人员不必专门处理JMS异常,因为Spring为所有JMS异常提供了一个未经检查的异常,并在JMS代码中重新抛出。
实战:下面是我在学习过程中的一个入门实例
1.  在web.xml文件中配置一个spring用的上下文:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/jmsconfig.xml</param-value>
</context-param>
<!-- 配置Spring容器 -->
<listener>
    <listener-class>
           org.springframework.web.context.ContextLoaderListener
       </listener-class>
</listener>

2.  创建jmsconfig.xml用来装配jms,内容如下:



<?xml version="1.0" encoding="UTF-8"?>   
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
    "http://www.springframework.org/dtd/spring-beans.dtd">   

<beans>
    <bean id="jmsConnectionFactory"
        class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
            <value>UIL2ConnectionFactory</value>
        </property>
    </bean>
    
    <bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
            <value>topic/scJms</value>
        </property>
    </bean>
    
    <!--  Spring JmsTemplate config -->
    <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>
    
    <!-- POJO which send Message uses  Spring JmsTemplate --> <!--配置消息发送者-->
    <bean id="messageProducer" class="co.transport.jms.MessageProducer">
        <property name="template" ref="jmsTemplate"/>
        <property name="destination" ref="destination"/>
    </bean>
    
    <!--  Message Driven POJO (MDP) -->
    <bean id="messageListener" class="co.transport.jms.MessageConsumer"/>
    
    <!--  listener container,MDP无需实现接口 -->
    <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>


其中:
        1)   jmsConnectionFactory用的是Jboss自带的一个ConnectionFactory,可以在Jboss的deploy/jms目录下的uil2-service.xml文件中找到。
      2)  destination使用自定义的,需要在Jboss加一个配置文件,下面会介绍。
      3)  MessageProducer是消息发送方
      4)  MessageConsumer实现了一个MessageListener,监听是否收到消息。

3.  发送和接收消息的class如下:
MessageProducer.java

public class MessageProducer {
    private JmsTemplate template;

    private Destination destination;

    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;
            }
        });
    }

    public void setDestination(Destination destination) {
        this.destination = destination;
    }

    public void setTemplate(JmsTemplate template) {
        this.template = template;
    }

}
MessageConsumer.java

public class MessageConsumer implements MessageListener {

    public void onMessage(Message message) {
        System.out.println("****************************************");
        System.out.println(message);
    }
}


4.  写一个Servlet作为测试

JmsTest.java(不要忘记在web.xml中配置这个servlet哦!)
public class JmsTest extends HttpServlet {

    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter pw = response.getWriter();
        pw.println("<html>");
        pw.println("<head>");
        pw.println("</head>");
        pw.println("<body>");
        try {
            ServletContext servletContext = this.getServletContext();
            WebApplicationContext wac = WebApplicationContextUtils
                    .getRequiredWebApplicationContext(servletContext);
            MessageProducer mp = (MessageProducer) wac.getBean("messageProducer");

            mp.send("Message!!!!");
            pw.println("<h3>success</h3>");
        } catch (JmsException e) {
            pw.println(e);
        }
        pw.println("</body>");
        pw.println("</html>");
    }

}

5.  在Jboss的deploy/jms目录下创建sc-jms-service.xml
<?xml version="1.0" encoding="UTF-8"?>   
<server>   
    <mbean code="org.jboss.mq.server.jmx.Topic"   
         name="jboss.mq.destination:service=Topic,name=somcJms">   
        <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>

6.  将工程达成war包直接放到Jboss的deploy目录下即可,然后启动Jboss访问JmsTest这个Servlet,你会在控制台看到接受到的消息,至此,一个最简单的Jms实例完成了

分享到:
评论

相关推荐

    tomcat spring jms 异步消息传递入门实例

    tomcat spring jms 异步消息传递入门实例

    spring jms tomcat 异步消息传递入门实例

    spring jms tomcat 异步消息传递入门实例

    activemq与spring整合发送jms消息入门实例

    activemq与spring整合发送jms消息入门实例 jar 包和实例代码都在压缩包里了

    spring_jms

    spring_jms是基于Maven+Spring+JMS+Active入门级实例.

    spring cloud事务从入门到精通

    1课程的介绍 2数据库事务的介绍 3mysq|事务讲解 4mysq|-JDBC事务讲解1 5mysqI-JDBC事务讲解2 6搭建一个spring-boot项目 ...9spring-boot jms介绍 10spring-boot jta单数据源事务实例 11spring-boot jta多数据源事务实例

    Spring攻略(第二版 中文高清版).part1

    1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 ...

    Spring攻略(第二版 中文高清版).part2

    1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    9.4.1 Spring Integration 快速入门 395 9.4.2 Message 395 9.4.3 Channel 395 9.4.4 Message EndPoint 398 9.4.5 Spring Integration Java DSL 400 9.4.6 实战 400 第10 章 Spring Boot 开发部署与测试 407 10.1 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    9.4.1 Spring Integration 快速入门 395 9.4.2 Message 395 9.4.3 Channel 395 9.4.4 Message EndPoint 398 9.4.5 Spring Integration Java DSL 400 9.4.6 实战 400 第10 章 Spring Boot 开发部署与测试 407 10.1 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    9.4.1 Spring Integration 快速入门 395 9.4.2 Message 395 9.4.3 Channel 395 9.4.4 Message EndPoint 398 9.4.5 Spring Integration Java DSL 400 9.4.6 实战 400 第10 章 Spring Boot 开发部署与测试 407 10.1 ...

    spring-boot-camel-amq:快速入门,展示如何将Spring Boot,Apache Camel和Apache ActiveMQ与Kubernetes或OpenShift一起使用

    Spring-Boot,Camel和EnMasse快速入门本快速入门演示了如何使用Kubernetes或OpenShift将Spring-Boot应用程序连接到EnMasse(MaaS)并在两条骆驼路线之间使用JMS消息传递。 在此示例中,我们将使用两个容器,一个容器...

    spring-boot-camel-xa

    Spring启动骆驼XA交易快速入门这个例子演示了如何在Spring-Boot上运行一个Camel服务,该服务在两个外部事务资源上支持XA事务:一个JMS资源(A-MQ)和一个数据库(PostgreSQL)。 外部资源可由Openshift提供,并且...

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java开源包1

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包2

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包3

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包6

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包5

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

Global site tag (gtag.js) - Google Analytics