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几种模式总结

原文地址:http://blog.csdn.net/czp11210/article/details/8822070 Queue(点到点)模式 在点对点的传输方式中,消息数据被持久化,每条消息...
  • boonya
  • boonya
  • 2016年04月06日 14:25
  • 5931

Android涉及到的设计模式

1、适配器模式:ListView或GridView的Adapter 简介:不同的数据提供者使用一个适配器来向一个相同的客户提供服务。   2、建造者模式:AlertDialog.Builder ...
  • dengshengjin2234
  • dengshengjin2234
  • 2013年01月14日 18:34
  • 21524

activemq 应答模式

http://greemranqq.iteye.com/blog/2194051 一、序言        JMS 用于系统解耦有一定帮助,像我们 iteye 的一些系统消息,可...
  • xiaxiaorui2003
  • xiaxiaorui2003
  • 2016年11月03日 16:58
  • 668

active mq 事物以及ack模式介绍

消息的确认模式:
  • joeyon
  • joeyon
  • 2014年07月04日 14:06
  • 2514

【ActiveMQ】ActiveMQ请求和应答模式

一、代码实现      要实现ActiveMQ的请求和应答模式,需要3部分组成:ActiveMQ消息总线、Client端(消息的发送者)、Server端(消息的接收者) 1、ActiveMQ消息总线 ...
  • u010515761
  • u010515761
  • 2014年12月25日 17:00
  • 3550

spring boot整合activeMQ,实现ptp和topic两者消息模式

如何下载安装MQ我就不说了,百度一大把,老规矩先上一下项目目录结构: 先看一下配置文件,主要是中间件的配置: ps:1.主要注意的是activeMQ默认提供ptp模式,若要使用topic模式需要假...
  • eumenides_
  • eumenides_
  • 2017年10月26日 17:10
  • 219

ActiveMQ的发布订阅模式

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

ActiveMQ之队列和主题

ActiveMQ的使用分为两种,一种是嵌入式,即把ActiveMQ作为内嵌的JMS provider集成到Tomcat或其他Web服务器中;另一种是独立部署,即ActiveMQ单独部署,独立运行,通过...
  • tianwei7518
  • tianwei7518
  • 2015年06月01日 11:32
  • 3543

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

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

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

通过Spring对ActiveMQ进行配置开发,发布订阅模式,支持消息的持久化。 需要Spring2.5版本以上,如果有多个订阅者,每个订阅者需要指定不同的 clientId 。   发布者的配...
  • jspamd
  • jspamd
  • 2016年07月14日 13:28
  • 3461
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:activeMQ发布订阅模式中中常用工具类
举报原因:
原因补充:

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