activeMQ发布订阅模式中中常用工具类

转载 2017年09月17日 04:28:48
package com.jms;
 
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
 
import javax.jms.BytesMessage;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
 
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.clapper.util.logging.Logger;
 
import com.pzoom.dsa.common.util.Log;
import com.pzoom.dsa.nerd.mysql.DBQueryHelper;
 
public class Jms
{
  static ConnectionFactory connectionFactory;
  static Connection connection = null;
  static Session session;
  static Map<String, MessageProducer> sendQueues = new ConcurrentHashMap<String, MessageProducer>();
 
  static Map<String, MessageConsumer> getQueues = new ConcurrentHashMap<String, MessageConsumer>();
 
  static Log log=Log.getLogger(DBQueryHelper.class);
 
  static {
    connectionFactory = new ActiveMQConnectionFactory(
      ActiveMQConnection.DEFAULT_USER, 
      ActiveMQConnection.DEFAULT_PASSWORD, 
      "tcp://10.100.100.100:61616?wireFormat.maxInactivityDuration=0");
    try
    {
      connection = connectionFactory.createConnection();
 
      connection.start();
 
      session = connection.createSession(Boolean.FALSE.booleanValue(), 
        1);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  static MessageProducer getMessageProducer(String name) {
    if (sendQueues.containsKey(name))
      return ((MessageProducer)sendQueues.get(name));
    try
    {
      Destination destination = session.createQueue(name);
      MessageProducer producer = session.createProducer(destination);
      sendQueues.put(name, producer);
      return producer;
    } catch (JMSException e) {
      e.printStackTrace();
    }
 
    return ((MessageProducer)sendQueues.get(name));
  }
 
  static MessageConsumer getMessageConsumer(String name) {
    if (getQueues.containsKey(name))
      return ((MessageConsumer)getQueues.get(name));
    try
    {
      Destination destination = session.createQueue(name);
      MessageConsumer consumer = session.createConsumer(destination);
      getQueues.put(name, consumer);
      return consumer;
    } catch (JMSException e) {
      e.printStackTrace();
    }
 
    return ((MessageConsumer)getQueues.get(name));
  }
 
  public static void sendMessage(String queue, String text) {
    try {
      TextMessage message = session.createTextMessage(text);
      getMessageProducer(queue).send(message);
     // log.info("sendMessage " + queue + "\t\t" + text);
    }
    catch (JMSException e) {
      e.printStackTrace();
    }
  }
   
  
   
  public static String getMessage(String queue)
  {
    try {
      TextMessage message = (TextMessage)getMessageConsumer(queue).receive(10000L);
      if (message != null) 
      return message.getText();
    } catch (JMSException e) {
      e.printStackTrace();
    }
    return null;
  }
 
  public static void close() {
    try {
      session.close();
    } catch (JMSException e) {
      e.printStackTrace();
    }
    try {
      connection.close();
    } catch (JMSException e) {
      e.printStackTrace();
    }
  }
}

ActiveMQ的发布订阅模式

1、ActivaMQ的发布订阅模式的简介       发布订阅模式有点类似于我们日常生活中订阅报纸。每年到年尾的时候,邮局就会发一本报纸集合让我们来选择订阅哪一个。在这个表里头列了所有出版发行的报纸,...
  • zbw18297786698
  • zbw18297786698
  • 2016-11-01 21:20:37
  • 3690

使用Spring配置ActiveMQ的发布订阅模式

通过Spring对ActiveMQ进行配置开发,发布订阅模式,支持消息的持久化。 需要Spring2.5版本以上,如果有多个订阅者,每个订阅者需要指定不同的 clientId 。   发布者的配...
  • jspamd
  • jspamd
  • 2016-07-14 13:28:33
  • 3892

ActiveMQ 发布订阅(publish-subscribe)

publish-subscribe      发布订阅模式有点类似于我们日常生活中订阅报纸。每年到年尾的时候,邮局就会发一本报纸集合让我们来选择订阅哪一个。在这个表里头列了所有出版发行的报纸,那...
  • u010310183
  • u010310183
  • 2016-06-15 11:41:54
  • 7131

分布式消息中间件(二)——ActiveMQ发布-订阅消息模式

1、消息生产者-消息发布-Topic /** * 消息生产者-消息发布者 * @author Administrator * */ public class JMSProducer { pr...
  • Daybreak1209
  • Daybreak1209
  • 2016-06-14 15:49:00
  • 4270

activeMq点对点和发布/订阅模式demo

  • 2016年06月27日 17:57
  • 3.69MB
  • 下载

ActiveMQ发布-订阅消息模式(同点对点模式的区别)

1、消息生产者-消息发布-Topic [html] view plain copy /**   * 消息生产者-消息发布者   * @author Administrator   *  ...
  • feicongcong
  • feicongcong
  • 2017-08-15 23:50:06
  • 307

ActiveMQ订阅模式持久化实现

我的诉求是,建一个订阅通道,然后多个客户端监听,当某个客户端掉线后,再上线的时候可以收到它没有接收到的消息。 本文主要参考了《使用Spring配置ActiveMQ的发布订阅模式》(http:...
  • fulai0_0
  • fulai0_0
  • 2016-08-05 11:37:04
  • 5299

消息队列-ActiveMQ学习笔记(三)-发布-订阅消息模式实现

发布-订阅消息模式与点对点模式类似,只不过在session创建消息队列时,由session.createQuene()变为session.createTopic()。 消息发布者代码: packa...
  • qq_26504875
  • qq_26504875
  • 2016-07-01 16:19:21
  • 3691

消息队列中点对点与发布订阅区别

背景知识JMS一个在 Java标准化组织(JCP)内开发的标准(代号JSR 914)。2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1....
  • lizhitao
  • lizhitao
  • 2015-08-17 11:49:47
  • 14626

spring整合ActiveMQ订阅模式(对象消息发送)

归纳一下spring整合activemq的基础配置以及使用,监听到消息后的更多逻辑操作需要自己完成,需要源代码可联系:993610778...
  • z3pc_ooxx
  • z3pc_ooxx
  • 2017-05-08 12:17:33
  • 1477
收藏助手
不良信息举报
您举报文章:activeMQ发布订阅模式中中常用工具类
举报原因:
原因补充:

(最多只允许输入30个字)