zoukankan      html  css  js  c++  java
  • ActiveMQ服务器之间传输对象,项目A发送对象到项目B接收发送对象《一》

    项目A发送消息端:

            // TODO Auto-generated method stub
            ConnectionFactory connectionFactory; // Connection :JMS 客户端到JMS
            // Provider 的连接
            Connection connection = null; // Session: 一个发送或接收消息的线程
            Session session; // Destination :消息的目的地;消息发送给谁.
            Destination destination; // MessageProducer:消息发送者
            MessageProducer producer; // TextMessage message;
            // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar
            connectionFactory = new ActiveMQConnectionFactory(
                    ActiveMQConnection.DEFAULT_USER,
                    ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
     
            try { // 构造从工厂得到连接对象
                connection = connectionFactory.createConnection();
                // 启动
                connection.start();
                // 获取操作连接
                session = connection.createSession(Boolean.TRUE,
                        Session.AUTO_ACKNOWLEDGE);
                // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
                destination = session.createQueue("FirstQueue");
                // 得到消息生成者【发送者】
                producer = session.createProducer(destination);
                // 设置不持久化,此处学习,实际根据项目决定
                producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
                // 构造消息,此处写死,项目就是参数,或者方法获取
     
                ActiveMQObjectMessage msg = (ActiveMQObjectMessage) session
                        .createObjectMessage();
                msg.setObject((Serializable) user);
                //将对象发送
                producer.send(msg);
                
                session.commit();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (null != connection)
                        connection.close();
                } catch (Throwable ignore) {
                }
            }

    项目B 接受对象:

    因为使用监听一直触发不了,没有解决,所以使用项目运行时开启线程持续接收消息。

    开启线程:

    public class MyListener  implements ServletContextListener   {
     
        
        private MyThread myThread;  
        
        public void contextDestroyed(ServletContextEvent e) { 
            if (myThread != null && myThread.isInterrupted()) {  
                myThread.interrupt();  
            }  
        }  
      
        public void contextInitialized(ServletContextEvent e) {  
            String str = null;  
            if (str == null && myThread == null) {  
                myThread = new MyThread();  
                myThread.start(); // servlet 上下文初始化时启动 socket  
            }  
        } 
     
    }

    线程开启接收消息:

        public class MyThread extends Thread {
        
        public void run() {
     
     
            while (!this.isInterrupted()) {// 线程未中断执行循环
                try {
                    Thread.sleep(200); // 每隔2000ms执行一次
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
     
     
                // ------------------ 开始执行 ---------------------------
     
     
                // ConnectionFactory :连接工厂,JMS 用它创建连接
                ConnectionFactory connectionFactory;
                // Connection :JMS 客户端到JMS Provider 的连接
                Connection connection = null;
                // Session: 一个发送或接收消息的线程
                Session session;
                // Destination :消息的目的地;消息发送给谁.
                Destination destination;
                // 消费者,消息接收者
                MessageConsumer consumer;
     
     
                connectionFactory = new ActiveMQConnectionFactory(
                        ActiveMQConnection.DEFAULT_USER,
                        ActiveMQConnection.DEFAULT_PASSWORD,
                        "tcp://localhost:61616");
     
     
                try {
                    // 构造从工厂得到连接对象
                    connection = connectionFactory.createConnection();
                    // 启动
                    connection.start();
                    // 获取操作连接
                    session = connection.createSession(Boolean.FALSE,
                            Session.AUTO_ACKNOWLEDGE);
                    // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
                    destination = session.createQueue("FirstQueue");
                    consumer = session.createConsumer(destination);
     
     
                    consumer.setMessageListener(new MessageListener() {
     
     
                        @Override
                        public void onMessage(Message message) {
                            // TODO Auto-generated method stub
                            User user;
                            try {
                                user = (User) ((ObjectMessage) message).getObject();
                                if (message != null) {
                                    // User s = (User) message.getObject();
                                    System.out.println("收到的消息对象:"
                                            + user.getLoginName());
                                    user.setCreateBy(new User("1"));
                                    user.setUpdateBy(new User("1"));
                                    //使用getBean方式获取Bean 因注解方式扫描不到.
                                    SystemService systemService = (SystemService)ApplicationContextHandle.getBean("systemService");                                
                                    systemService.saveUser(user);
                                    
                                }
     
     
                            } catch (JMSException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    });
     
     
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (null != connection)
                            connection.close();
                    } catch (Throwable ignore) {
                    }
                }
            }
        }
    }

    配置Web.xml 配置线程监听。项目开启时启动线程

         <listener>
                <listener-class>com.thinkgem.jeesite.modules.test.web.MyListener</listener-class>
        </listener> 
  • 相关阅读:
    设计模式之装饰者模式
    每天一点点
    生财有道
    地图的移动和缩放
    钱分割
    位运算
    ref和out
    使用startCoroutine制定倒计时
    静态类和单例类
    Awake和Start
  • 原文地址:https://www.cnblogs.com/yypr/p/9777766.html
Copyright © 2011-2022 走看看