zoukankan      html  css  js  c++  java
  • 基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送

    首先:在你的tomcat conf的context.xml 文件的Context标签下配置:

         <Resource name="queue/connectionFactory"    
                    auth="Container"    
                    type="org.apache.activemq.ActiveMQConnectionFactory"  
                    description="JMS Connection Factory"  
                    factory="org.apache.activemq.jndi.JNDIReferenceFactory"  
                    brokerURL="tcp://localhost:61616"  
                    brokerName="LocalActiveMQBroker" />  
                      
    <Resource name="queue/queue0"    
                    auth="Container"    
                    type="org.apache.activemq.command.ActiveMQQueue"  
                    description="My Queue"  
                    factory="org.apache.activemq.jndi.JNDIReferenceFactory"  
                    physicalName="TomcatQueue" />

    然后代码中下载

    ActiveMQ的客户端相关包:
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <version>5.14.0</version>
    </dependency>

    然后写测试代码:

    import javax.jms.DeliveryMode;
    import javax.jms.Queue;
    import javax.jms.QueueConnection;
    import javax.jms.QueueConnectionFactory;
    import javax.jms.QueueReceiver;
    import javax.jms.QueueSender;
    import javax.jms.QueueSession;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.naming.InitialContext;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    @RequestMapping("/jms/tests")
    @ResponseBody
    public class TestAction {
    
        /**
         * 发送消息
         */
        @RequestMapping("/send")
        public void send() {
            try {
                // get the initial context
                InitialContext context = new InitialContext();
    
                // lookup the queue object
                Queue queue = (Queue) context.lookup("java:comp/env/queue/queue0");
    
                // lookup the queue connection factory
                QueueConnectionFactory conFactory = (QueueConnectionFactory) context
                        .lookup("java:comp/env/queue/connectionFactory");
    
                // create a queue connection
                QueueConnection queConn = conFactory.createQueueConnection();
    
                // create a queue session
                QueueSession queSession = queConn.createQueueSession(false, Session.DUPS_OK_ACKNOWLEDGE);
    
                // create a queue sender
                QueueSender queSender = queSession.createSender(queue);
                queSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
    
                // create a simple message to say "Hello World"
                TextMessage message = queSession.createTextMessage("Hello World");
    
                // send the message
                queSender.send(message);
    
                // print what we did
                System.out.println("Message Sent: " + message.getText());
    
                // close the queue connection
                queConn.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
        /**
         * 接收消息
         */
        @RequestMapping("/reveive")
        public void reveive() {
            try {
                // get the initial context
                InitialContext context = new InitialContext();
    
                // lookup the queue object
                Queue queue = (Queue) context.lookup("java:comp/env/queue/queue0");
    
                // lookup the queue connection factory
                QueueConnectionFactory conFactory = (QueueConnectionFactory) context
                        .lookup("java:comp/env/queue/connectionFactory");
    
                // create a queue connection
                QueueConnection queConn = conFactory.createQueueConnection();
    
                // create a queue session
                QueueSession queSession = queConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
    
                // create a queue receiver
                QueueReceiver queReceiver = queSession.createReceiver(queue);
    
                // start the connection
                queConn.start();
    
                // receive a message
                TextMessage message = (TextMessage) queReceiver.receive();
    
                // print the message
                System.out.println("Message Received: " + message.getText());
    
                // close the queue connection
                queConn.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    最后访问链接,先请求发送消息方法,然后请求接收消息方法,打开你的activemq服务器,可观察消息的发送与接收

    ok....测试例子通过

    该例子使用JMS规范提供的通用接口来写的。。。

    参考:https://howtodoinjava.com/jms/jms-point-to-point-message-example/

  • 相关阅读:
    WebSocket理解与使用
    JS面向对象与prototype,__proto__,constructor
    JS值传递与引用传递
    vue报错:./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/selector.js?type=script&index=0!
    对于图片视频编辑类产品的思考
    时尚衣裙外贸独立站搭建(一)
    2021年Wordpress手把手教你做个独立站——部署篇
    一次备案失败所引发的思考
    2021年Wordpress博客装修美化(二)
    做什么,怎么做?(20210615)
  • 原文地址:https://www.cnblogs.com/huzi007/p/7908734.html
Copyright © 2011-2022 走看看