`

JMS一些实例十一到实例十二

阅读更多

JMS一些实例十一到实例十二

 

深入掌握JMS(十一):TemporaryQueue和TemporaryTopic

TemporaryQueue和TemporaryTopic,从字面上就可以看出它们是“临时”的目的地。可以通过Session来创建,例如:
    TemporaryQueue replyQueue = session.createTemporaryQueue();
    虽然它们是由Session来创建的,但是它们的生命周期确实整个Connection。如果在一个Connection上创建了两个Session,则一个Session创建的TemporaryQueue或TemporaryTopic也可以被另一个Session访问。那如果这两个Session是由不同的Connection创建,则一个Session创建的TemporaryQueue不可以被另一个Session访问。
    另外,它们的主要作用就是用来指定回复目的地, 即作为JMSReplyTo。
    在下面的例子中,先创建一个Connection,然后创建两个Session,其中一个Session创建了一个TemporaryQueue,另一个Session在这个TemporaryQueue上读取消息。

import javax.jms.*; 
import org.apache.activemq.ActiveMQConnectionFactory; 
import org.apache.activemq.command.ActiveMQQueue; 
public class TemporaryQueueTest { 
    public static void main(String[] args) throws Exception { 
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost"); 
        Connection connection = factory.createConnection(); 
        connection.start(); 
        Queue queue = new ActiveMQQueue("testQueue2"); 
        final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
        //使用session创建一个TemporaryQueue。 
        TemporaryQueue replyQueue = session.createTemporaryQueue(); 
        //接收消息,并回复到指定的Queue中(即replyQueue) 
        MessageConsumer comsumer = session.createConsumer(queue); 
        comsumer.setMessageListener(new MessageListener(){ 
            public void onMessage(Message m) { 
                try { 
                    System.out.println("Get Message: " + ((TextMessage)m).getText()); 
                    MessageProducer producer = session.createProducer(m.getJMSReplyTo()); 
                    producer.send(session.createTextMessage("ReplyMessage")); 
                } catch (JMSException e) { } 
            } 
        }); 
        //使用同一个Connection创建另一个Session,来读取replyQueue上的消息。 
        Session session2 = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); 
        MessageConsumer replyComsumer = session2.createConsumer(replyQueue); 
        replyComsumer.setMessageListener(new MessageListener(){ 
            public void onMessage(Message m) { 
                try { 
                    System.out.println("Get reply: " + ((TextMessage)m).getText()); 
                } catch (JMSException e) { } 
            } 
        }); 
        MessageProducer producer = session.createProducer(queue); 
        TextMessage message = session.createTextMessage("SimpleMessage"); 
        message.setJMSReplyTo(replyQueue); 
        producer.send(message); 
    } 
} 
运行结果为: 
Get Message: SimpleMessage 
Get reply: ReplyMessage 
如果将: 
Session session2 = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); 
更改为: 
Connection connection2 = factory.createConnection(); 
Session session2 = connection2.createSession(true, Session.AUTO_ACKNOWLEDGE); 
就会得到类似于下面的异常: 
Exception in thread "main" javax.jms.InvalidDestinationException: Cannot use a Temporary destination from another Connection。

 

 

 

 

深入掌握JMS(十二):MDB

在EJB3中,一个MDB(消息驱动Bean)就是一个实现了MessageListener接口的POJO。下面就是一个简单的MDB。

@MessageDriven(activationConfig={ 
                    @ActivationConfigProperty(propertyName="destinationType", 
                            propertyValue="javax.jms.Queue"), 
                    @ActivationConfigProperty(propertyName="destination", 
                            propertyValue="queue/testQueue")}) 
            public class SimpleMDB implements MessageListener { 
                public void onMessage(Message message) { 
                    try { 
                        System.out.println("Receive Message : " + 
            ((TextMessage)message).getText()); 
                    } catch (JMSException e) { 
                        e.printStackTrace(); 
                    } 
                } 
            } 

            它要求必须标注为@MessageDriven。它所监听Destination通过标注属性来注入。 

            下面是一个发送消息的StatelessBean: 
            @Remote 
            public interface IMessageSender { 
                public void sendMessage(String content) throws Exception; 
            } 

            @Stateless 
            @Remote 
            public class MessageSender implements IMessageSender { 
                @Resource(mappedName="ConnectionFactory") 
                private ConnectionFactory factory; 
                @Resource(mappedName="queue/testQueue") 
                private Queue queue; 
                public void sendMessage(String content) throws Exception { 
                    Connection cn = factory.createConnection(); 
                    Session session = cn.createSession(false, 
            Session.AUTO_ACKNOWLEDGE); 
                    MessageProducer producer = session.createProducer(queue); 
                    producer.send(session.createTextMessage(content)); 
                } 
            } 
            这个EJB只有一个方法SendMessage。ConnectionFactory和Queue通过标注注入。 

            接下来是客户端: 
            public class MessageSenderClient { 
                public static void main(String[] args) throws Exception { 
                    Properties props = new Properties(); 
                    props.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
            "org.jnp.interfaces.NamingContextFactory"); 
                    props.setProperty(Context.PROVIDER_URL, "localhost:2099"); 
                    Context context = new InitialContext(props); 
                    IMessageSender messageSender = (IMessageSender) 
            context.lookup("MessageSender/remote"); 
                    messageSender.sendMessage("Hello"); 
                } 
            } 
            它通过JNDI查找到上面的EJB,然后调用sengMessage.

 

分享到:
评论

相关推荐

    JMS完全实例(八个实例)

    实例中可能涉及到的消息网关配置,如ActiveMQ,是JMS实现的核心组件。ActiveMQ是Apache软件基金会开发的一个开源消息中间件,提供高可靠性的消息传递服务。在运行这些程序之前,我们需要先启动ActiveMQ服务器,并...

    activeMQ-JMS实例

    总结来说,"activeMQ-JMS实例"是一个基于Spring MVC的示例,它演示了如何使用Spring的JMS支持与ActiveMQ结合,实现消息的发送和接收。这个实例对于学习和理解JMS以及如何在实际项目中应用它是很有帮助的。通过这个...

    JBOSS建立JMS应用实例

    【JBOSST建立JMS应用实例】 JBOSST(Java Business Open Source Solutions)是一个开源的企业级应用服务器,它提供了全面的中间件服务,包括对Java消息服务(JMS)的支持。JMS是一种标准,用于在分布式环境中传递...

    JMS经典实例 基于weblogic

    在实现JMS实例时,你可以采用编程模型或声明式模型。编程模型需要在代码中显式创建和管理JMS资源,而声明式模型通过WebLogic管理控制台或XML配置文件完成资源配置。 例如,一个简单的JMS生产者可能会创建一个消息,...

    JMS P2P 实例程序

    JMS P2P 实例程序 希望给大家版主

    ActiveMq-JMS简单实例

    **ActiveMQ-JMS简单实例** ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它实现了Java消息服务(Java Message Service,简称JMS)规范。JMS是一种标准接口,用于在分布式环境中传递消息,使得应用程序之间...

    JMS详细实例学习教程

    JMS 详细实例学习教程 JMS(Java Message Service)是一种基于Java平台的消息服务规范,用于在分布式系统中异步通信。JMS提供了一种灵活、可靠、可扩展的消息传递机制,使得应用程序之间可以相互通信和交换数据。 ...

    JMS整合Spring实例

    **JMS整合Spring实例** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。它允许应用程序创建、发送、接收和读取消息,以此来解耦生产者和消费者。而Spring框架...

    WebLogic jms三个实例

    三个jms的实例,实现了jms的queue和topic,同时也实现了远程传送消息和本地传送消息,另外也分别实现了session的事务和非事务模式,有了这三个例子应该可以满足你的任何关于jms的需求了,由于上传限制,另外还需要...

    JMS信息传输实例代码

    JMS 信息传输实例代码 JMS (Java Message Service) 是 Java 消息服务,提供标准的产生、发送、接收消息的接口,简化企业应用的开发。JMS 支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅...

    javax.jms.jar包与JMS实例代码

    JMS实例代码通常会涉及到异常处理,如JMSException和其他相关的运行时异常,确保在出现问题时能够优雅地处理错误。此外,为了提高性能和可用性,可以使用事务管理(Session的TRANSACTED或CLIENT_ACKNOWLEDGE模式)...

    JMS pubsub实例

    JMS pubsub实例 提供学习 希望有帮助 (*^__^*) 嘻嘻……

    JMS实例 实例源码 点对点 主题 同步异步

    通过以上的JMS实例源码,我们可以看到如何在Java程序中创建、发送和接收消息,以及如何选择适合的通信模型(点对点或发布/订阅)和通信方式(同步或异步)。在实际开发中,根据业务需求选择合适的模型和通信方式,...

    ActiveMq-JMS好用实例详解

    ### ActiveMQ-JMS好用实例详解 #### 一、ActiveMQ简介及特点 **ActiveMQ** 是一个非常流行的开源消息中间件,它基于 **Java消息服务(JMS)** 规范,能够提供高度可靠的消息传递机制。ActiveMQ 以其丰富的功能集、...

    jboss服务器下的jms实例

    【JBoss 服务器下的 JMS 实例】 Java 消息服务 (JMS) 是 Java 平台中用于处理异步消息传递的标准API,它在面向服务架构 (SOA) 中扮演着关键角色,特别是在需要与外部系统进行异步通信的企业环境中。JBoss 服务器...

    Flex + BlazeDS + Java + JMS 通信实例(附源码)

    在本例中,JMS被用来实现实时数据推送,当Java后端有新数据时,通过JMS推送到Flex客户端,进而更新UI。 5. **消息模型**:在JMS中,有两种主要的消息模型——点对点(Point-to-Point, PTP)和发布/订阅(Publish/...

    Java-JMS实例

    Java Message Service (JMS) 是Java平台中用于在分布式环境中交换异步消息的标准API。它为应用程序提供了一种可靠和高效的方式来发送、接收和管理消息,这些消息可以在不同的应用程序之间传输,甚至跨越不同的网络和...

    JMSSample实例

    JMS Sample 实例 提供学习 希望有版主

    spring与jms结合实例

    ### Spring与JMS结合实例详解 #### 一、引言 在现代企业级应用开发中,消息中间件作为实现系统间解耦、提高系统稳定性的关键组件被广泛应用。Java消息服务(Java Message Service, JMS)是Java平台中关于面向消息...

    JMS 文档实例讲解

    JMS(Java Message Service)是Java平台中用于企业级应用的消息中间件标准,它定义了生产、发送、接收消息的标准接口,使得应用程序可以与各种消息系统进行交互。JMS主要包含两个通信模型:点到点(P2P)模型和发布/...

Global site tag (gtag.js) - Google Analytics