`

第四章 ActiveMq的传输连接器

 
阅读更多



                            
ActiveMq的传输连接器

 

1.1理解连接URLS(统一资源定位符)

     基础的url是这样的字符格式:<scheme>:<scheme-specific-part>

    例如:tcp://localhost:61616代表建议一个和localhost61616端口的tcp连接.

    容错传输直接自动重连或者连接到集群的另外一个节点的能力(static:(tcp://host1:61616,tcp://host2:61616)中间不能加空格).

 

1.2传输连接器

    为了交换数据,生产者和消费者需要连接到broker,这种客户端和broker之间的连接就是通过传输连接器的.

    1.2.1   配置传输连接器(/conf/activemq.xml)

              xml文件中有以下这么一段节点,这里可以配置直接的协议以及对应的端口和一些定制化参数.

       <transportConnectors>

            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
           <transportConnector name="openwire" uri="tcp://localhost:61616"  discoveryUri="multicast://default"/>

          <transportConnector name="nio" uri="nio:localhost:61618?trace=true" />

         <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

            <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

        </transportConnectors>

    启动bat脚本就可以看到某些连接协议被绑定了.

  
                                    

 

1.3在网络间连接activeMq

      最常用的方案就是把activemq当做一个单独的java应用来运行.这意味着客户端需要某些网络协议去连接activemq.以下是所有用于连接的网络协议以及概述

      
                                         

 

    1.3.1  TCP(Transmission Control Protocol传输控制协议)

             TCP作为一种被最广泛应用的因特网协议,同时也被大范围的用于底层的网络协议.所以TCP传输连接器也作为ActiveMq中最常用的连接器.

              RFC 793 :传输控制协议(TCP)的目的是作为一个高度可靠的在主机和主机之间进行数据包交换的协议.

             在网络之间交换数据之前,我们需要把数据序列化成合适的格式.数据使用我们所知的总线协议来吧数据序列化和反序列化成字节序列在总线中传输.ActiveMq中使用的默认总线协议是OpenWire.它的主要用途就是为了更有效更快的传输数据.

             tcp的配置可以加入如下节点

<transportConnectors>

  <transportConnector name="tcp"  uri="tcp://localhost:61616?trace=true"/>

</transportConnectors>

   1.3.2 NIO(new I/O API PROTOCOL)      

           nio传输连接器和tcp连接器区别不大.它也是用tcp作为网络协议,openwire作为总线协议作为底层实现.唯一的区别是传输的实现nio使用了NIO api.这使得它更使用以下几种情况

<!--[if !supportLists]-->·         <!--[endif]-->有大量客户端需要连接到broker ----能连接到broker的数量受限于操作系统的支持的线程数量.Nio 连接器可以比tcp连接器开启更少的线程对于每个client.

<!--[if !supportLists]-->·         <!--[endif]-->传输的流量非常巨大 ----nio连接器提供比tcp更好的体验(broker方使用更少的资源)

   nio的配置可以加入如下节点,你可以使用tcpnio (发送/接收)

<transportConnectors>

  <transportConnector

name="nio"  uri="nio://localhost:61618?trace=true" />

</transportConnectors>

   

 

   1.3.3  UDP协议

      tcp是面向流的协议,传输的数据是有序的,不会出现重复发送,UDP传输的数据是无序的,数据有可能被多次传输.tcp保证在传输过程中不会丢包,这是靠着在发送者和接受者之间建立连接来保证的.UDP是无连接的协议,所以它不是可靠的.

     udp使用场景:

     udp适用哪些需要快速数据传输,以及能处理丢包问题的应用.

     有时候broker被置于防火墙之后,你只能通过UDP端口去访问它,

     udp配置可以加入如下节点

<transportConnectors>

 <transportConnector

  name="udp"   uri="udp://localhost:61618?trace=true" />

</transportConnectors>

   1.3.4 SSL协议(后续会将)

   1.3.5 HTTP/HTTPS协议

   它使用tcp作为底层网络协议并增加了一些自己的逻辑.ActiveMq实现了http传输协议,可以使用http协议用xml来交换数据.这允许Activemq绕过防火墙

 

 

 http配置可以加入如下节点

<transportConnectors>

 <transportConnector name="http"

   uri="http://localhost:8080?trace=true" />

</transportConnectors>

为了使用http传输协议,需要加入以下依赖.

<dependency>

<groupId>org.apache.activemq</groupId>

<artifactId>activemq-optional</artifactId>

<version>5.4.1</version>

</dependency>

实际上就是加入以下jar

$ACTIVEMQ_HOME/lib/optional/activemq-optional-<version>.jar

$ACTIVEMQ_HOME/lib/optional/commons-httpclient-<version>.jar

$ACTIVEMQ_HOME/lib/optional/xstream-<version>.jar

$ACTIVEMQ_HOME/lib/optional/xmlpull-<version>.jar

使用http传输协议对于总体性能来说不是很好(相对于tCP),如果性能很重要,请慎重使用http传输协议.

 

1.4在虚拟机中连接到ActiveMq

   Vm传输连接器是一种内嵌式的broker.使用它意味着不需要额外的网络连接,只需要通过直接方法调用.当第一个被Vm协议创建的连接被建立的时候broker启动.所有之后的连接将会自动连接到这个broker.




 
 

   你可以使用这种形式的url作为brokerUrl

  vm:broker:(tcp://localhost:6000)?brokerName=embeddedbroker&persistent=false 

 我们定义了一个内嵌的名为embeddedBrokerbroker,配置了一个监听6000端口的tcp连接传输器.和内嵌broker处于同一虚拟机的应用通过vm传输连接到broker,外部的应用通过tcp来连接.  

 你同样可以使用以下方式的url作为brokerUrl:

   vm://localhost?brokerConfig=xbean:activemq.xml

 

 

  • 大小: 25.2 KB
  • 大小: 33 KB
  • 大小: 26.7 KB
  • 大小: 38 KB
  • 大小: 33 KB
  • 大小: 38.6 KB
  • 大小: 64.1 KB
分享到:
评论

相关推荐

    window系统搭建activeMQ集群和操作步骤

    - **网络连接器**:ActiveMQ集群间通信的关键组件,用于节点之间的消息传递和心跳检测。 - **虚拟主题(Virtual Topics)**:在集群环境中,虚拟主题允许广播消息到所有订阅者,提高消息分发效率。 2. **环境准备**...

    测试activeMQ的java程序

    在实际应用中,ActiveMQ还提供了许多高级特性,如事务、消息优先级、消息持久化、网络传输优化等。理解并掌握这些特性对于构建高效、可靠的分布式系统至关重要。通过持续的测试和实践,开发者可以更好地利用ActiveMQ...

    Delphi ActiveMQ 使用帮助

    ### Delphi ActiveMQ 使用帮助 #### 一、简介 Delphi ActiveMQ 使用帮助文档主要介绍了如何在 Delphi 开发环境中使用 HabariActiveMQClient 库与 Apache ActiveMQ 消息中间件进行交互的方法。这份文档提供了从安装...

    activeMQ所需的头文件和静态库

    ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它基于Java Message Service (JMS) API,用于在分布式系统中高效地处理和传输消息。在这个压缩包中,包含了ActiveMQ使用过程中必要的头文件(header files)和...

    apache-activemq-4.1.0-incubator.zip

    4. **可扩展性**:ActiveMQ支持集群、负载均衡和故障转移,能够随着业务增长灵活扩展。 5. **安全性**:提供用户认证和授权,以及基于角色的访问控制,确保消息传输的安全。 6. **管理工具**:包含了一个Web控制台,...

    ActiveMQ In Action

    **来源:** 第四部分高级 ActiveMQ 中的第九至第十一章 **详细内容:** - **Broker 架构设计:** 探讨如何设计 Broker 的拓扑结构以适应不同规模的应用场景。 - **高级 Broker 特性:** 如何利用 ActiveMQ 提供的...

    0927分布式消息通信-ActiveMQ1

    14. **高性能策略**:网络连接器(networkConnector)用于优化Broker间的通信,静态和动态网络连接提供了灵活的配置方式。但仅靠networkConnector无法实现高可用,需要配合其他方案如ZooKeeper实现主从模式。 15. *...

    my cpp activemq demo code for try

    安装和配置ActiveMQ库是开始编写代码的第一步。 2. **连接管理**:连接到ActiveMQ服务器通常需要创建一个`CMSConnectionFactory`对象,然后使用它来创建`Connection`。`Connection`代表了到服务器的物理连接,可以...

    java聊天系统

    4. **音频处理**:语音聊天功能涉及到音频编解码和传输。Java Media Framework (JMF) 或Java Sound API可以用于处理音频流,实现录音、播放和传输。可能还需要第三方库如Opus或G.711来支持高质量的语音编码。 5. **...

    apache-camel-2.9.4.zip

    组件是预定义的连接器,用于与各种协议、API和服务交互,如HTTP、FTP、JMS、MQTT等。DSL则允许用户用简洁的语句定义路由规则,如Java、XML或Groovy形式。 在这个版本中,用户可以找到以下关键组件: 1. JMS(Java...

    java开源包4

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    JAVA上百实例源码以及开源项目源代码

    EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...

    第3次笔记 张帅豪1

    TCP/IP四层模型包括应用层、传输层、网络层和链路层,套接字通过五元组(源IP、源端口、目的IP、目的端口、协议)来唯一标识一个网络连接。 2. 并发服务技术:为了处理多个客户端请求,服务器通常采用事件驱动或多...

    java 开源chat

    4. **设计模式**:在实现Chat应用时,设计模式如单例模式(用于服务器实例)、工厂模式(用于创建客户端对象)和观察者模式(用于事件驱动的通信)等可能会被广泛使用。 5. **数据序列化与反序列化**:Java Chat...

    java开源包1

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包11

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包2

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

Global site tag (gtag.js) - Google Analytics