ActiveMQ源码解析(一):聊聊broker

原创 2016年05月30日 22:49:52
一、Broker
    消息队列核心,相当于一个控制中心,负责路由消息、保存订阅和连接、消息确认和控制事务
1.Broker接口
    定义了一些获取broker本身相关信息,添加connection、destination、session、消息生产者、控制事务的接口
1.1 CompositeDestinationBroker
    多目的地Broker,Producer可以通过它将生产的消息传给多个destination
1.2 EmptyBroker
    空broker
1.3 ErrorBroker
    调用的它的方法会抛出BrokerStoppedException
1.4 TransactionBroker
    为broker的每个方法提供分布式事务XA支持

2、BrokerFactory(抽象工厂模式)
public static BrokerService createBroker(URI brokerURI, boolean startBroker) throws Exception {
        if (brokerURI.getScheme() == null) {
            throw new IllegalArgumentException("Invalid broker URI, no scheme specified: " + brokerURI);
        }
        //根据url创建工厂实例
        BrokerFactoryHandler handler = createBrokerFactoryHandler(brokerURI.getScheme());
        //利用工厂handler创建broker(产品)
        BrokerService broker = handler.createBroker(brokerURI);
        if (startBroker) {
            broker.start();
        }
        return broker;
    }
3、BrokerContext
    上下文环境,参考spring的ApplicationContext
4、BrokerContextAware
    获取上下文环境接口
5、BrokerFilter
    Broker的子类,用户可以在broker的操作前后加入一些自己的逻辑以实现像安全这样的逻辑
6、BrokerPlugin和BrokerPluginSupport
    BrokerPlugin只有一个方法:
    
    BrokerPluginSupport继承自MutableBrokerFilter并实现BrokerPlugin,实现机制跟BrokerFilter类似。
7、BrokerRegistry
    
     很明显,这里有一个单例模式,一个互斥信号量mutex和一个保存所有BrokerService的map brokers。它是一个注册中心,负责维护所有BrokerSerevice,完成获取、绑定和解绑等操作。
8、BrokerService和BrokerServiceAware
    后者是获取BrokerService的接口,前者是一个核心的类,它有自己的声明周期,连接了Connector,Broker,Region等组件,包括创建、注册和移除相关的组件。

8.1、SslBrokerService
    在创建连接时提供ssl安全链接

9、TransportConnector
    提供通信服务

10、ProductorBrokerExchange和ConsumerBrokerExchange
    对Broker和Producer、Broker和Consumer之间的流进行控制,并跟踪记录信息

总结
    1、ActiveMQ的特性基本上都是通过BrokerFilter模式加上去的

activemq的多个broker之间的消息共享

假设activemq有两个broker服务,A和B。 在A的activemq.xml的broker标签下添加如下配置:                         该配置可以让消息从A到B,...
  • keketrtr
  • keketrtr
  • 2015年11月12日 12:46
  • 2328

ActiveMQ源码分析(三):聊聊broker到broker的通讯

Broker到Broker的通讯涉及到activemq集群,主要由network包下的类来实现,我们主要来分析一下NetworkConnector和NetworkBridge类,读者就能大概了解bro...
  • flashflight
  • flashflight
  • 2016年06月20日 02:02
  • 2085

ActiveMQ 初步入门及相关概念理解

1 JMS 在介绍ActiveMQ之前,首先简要介绍一下JMS规范。 1.1 JMS的基本构件 1.1.1 连接工厂 连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的...
  • zxbcjdx
  • zxbcjdx
  • 2011年09月21日 17:00
  • 6611

ActiveMQ源码解析(四):聊聊消息的可靠传输机制和事务控制

在消息传递的过程中,某些情况下比如网络闪断、丢包等会导致消息永久性丢失,这时消费者是接收不到消息的,这样就会造成数据不一致的问题。那么我们怎么才能保证消息一定能发送给消费者呢?怎么才能避免数据不一致呢...
  • flashflight
  • flashflight
  • 2016年06月27日 03:27
  • 5618

消息中间件 activeMQ的源码分析 之 开篇

以前对JMS尤其是activeMQ不了解,一看到什么地方需要使用消息中间件,就比较反感。主要原因是感觉JMS的实现都比较复杂,怕在真实使用过程中出现什么问题时会比较被动。所以,我们基本上是自己写类似的...
  • lulongzhou_llz
  • lulongzhou_llz
  • 2014年08月01日 11:29
  • 3899

activeMQ 源码分析

  • 2012年06月29日 11:13
  • 349KB
  • 下载

ActiveMQ源码解析(二):聊聊客户端和broker的通讯

ActiveMQ支持以下几种通讯协议: 协议    备注 HTTP/HTTPS 基于http协议 TCP 默认协议 UDP 性能更好,但不可靠 SSL 安全链接 NI...
  • flashflight
  • flashflight
  • 2016年06月20日 00:01
  • 2117

activeMQ源码解析之源码调试启动

从官网下载activeMQ源码或者从github上git下来后,就可以对高大上的源码进行调试了: 1,先分析源码发现它是maven项目,具有很多子module,每一个modul都是一个子工程。 2...
  • u010446936
  • u010446936
  • 2017年01月10日 15:03
  • 780

ActiveMQ从源码构建

众多开源项目,我们一般都是直接拿过来用之而后快。不过我们也应该知道这些项目是如何从源码构建而来的。 既然代码是写出来的,就不能避免有BUG存在,话说没有完美的软件,也没有无漏洞的程序。其实从源码构建,...
  • catoop
  • catoop
  • 2016年01月05日 15:10
  • 5244

ActiveMQ源码架构解析第一节

第一篇文章我们先从hello world写起,下面是使用java代码调用activemq的api发送一条消息。   public class test {     public static v...
  • libing13810124573
  • libing13810124573
  • 2015年11月02日 21:43
  • 999
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ActiveMQ源码解析(一):聊聊broker
举报原因:
原因补充:

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