`
liyixing1
  • 浏览: 961511 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

ActiveMQ配置 连接activemq

    博客分类:
  • jms
阅读更多


activemq代理
JMS代理(如ActiveMQ broker)的主要作用是为客户端程序提供一种通信机制.为此,ActiveMQ提供一种连接机制,这种连接机制使用传输连接器(transport connector)实现客户端与代理(client-to-broker)之间的通信;使用网络连接器(network connector)实现代理与代理之间的通信.代理可以简单的看出启动了一个socket监听,一个jms中间件可以启动多个通信监听。另外activemq本身是通过java实现的,我们也可以通过编程方式,在代码中启动activemq的代理器。连接机制使用传输连接器(transport connector)实现客户端与代理(client-to-broker)之间的通信;使用网络连接器(network connector)实现代理与代理之间的通信,网络连接起在做集群的时候可能要用到的。

连接配置
文件conf/activemq-demo.xml提供的示例有一段内容

<!--
            The transport connectors expose ActiveMQ over a given protocol to
            clients and other brokers. For more information, see:

            http://activemq.apache.org/configuring-transports.html
        -->
        <transportConnectors>
            <!-- Create a TCP transport that is advertised on via an IP multicast
              group named default. -->
            <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/>
            <!-- Create a SSL transport. Make sure to configure the SSL options
              via the system properties or the sslContext element. -->
            <transportConnector name="ssl" uri="ssl://localhost:61617"/>
            <!-- Create a STOMP transport for STOMP clients. -->
            <transportConnector name="stomp" uri="stomp://localhost:61613"/>
            <!-- Create a Websocket transport for the websocket dmeo -->
            <transportConnector name="ws" uri="ws://localhost:61614/" />
        </transportConnectors>


可以看出,一个transportConnectors可以包含多个transportConnector ,他们的name和uri是唯一的。discoveryUri 是可选的。如上,定义了4个连接器。

ActiveMq支持的网络协议
协议描述
TCP默认的协议,性能相对可以
NIO基于TCP协议之上的,进行了扩展和优化,具有更好的扩展性
UDP性能比TCP更好,但是不具有可靠性
SSL安全链接
HTTP(S)基于HTTP或者HTTPS
VMVM本身不是协议,当客户端和代理在同一个Java虚拟机(VM)中运行时,他们之间需要通信,但不想占用网络通道,而是直接通信,可以使用该方式


TCP
是ActiveMQ默认的协议,访问方式是
tcp://hostname:port?key=value&key=value

配置示例

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


其中trace是active提供的参数,用于打开日志,记录每次的通过该链接通道的命令。
NIO
非阻塞方式的IO访问,基于TCP,但是提供了更好的性能,对于大访问量时,可以考虑

访问及配置
nio://hostname:port?key=value

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


UDP
并不保证数据有效性,如在线游戏等情况。

udp://hostname:port?key=value

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

SSL
ssl://hostname:port?key=value

<transportConnectors>
<transportConnector name="ssl" uri="ssl://localhost:61617?trace=true" />
</transportConnectors>

默认的安全证书位于conf的broker.ts,和broker.ks文件该证书为示例证书,如果要使用SSL协议,需要自己生成相应的环境下的证书。
对应的客户端证书是client.ts,和client.ks
在访问SSL链接时,需要指定使用的证书文件(jvm系统属性)
java
-Djavax.net.ssl.keyStore=${ACTIVEMQ_HOME}/conf/client.ks \
-Djavax.net.ssl.keyStorePassword=password \
-Djavax.net.ssl.trustStore=${ACTIVEMQ_HOME}/conf/client.ts \

如果指定使用了其他的证书,在服务端配置部分,需要改成
<broker xmlns="http://activemq.apache.org/schema/core"
brokerName="localhost"
dataDirectory="${activemq.base}/data">
[b]<sslContext
keyStore="file:${activemq.base}/conf/mybroker.ks"
keyStorePassword="test123"/>[/b]
</sslContext>
<transportConnectors>
<transportConnector name="ssl"
uri="ssl://localhost:61617" />
</transportConnectors>
</broker>



启用/禁用 SSL加密套件
ActiveMQ的SSL传输连接器使用的SSL加密套件(SSL cipher suites)由JVM提供.关于加密套件的详细信息
请参考SUN的JSSE文档。每种加密套件的实现等都不一样,从5.4.0版本的ActiveMQ开始支持新的参数transport.enabledCipherSuites
<transportConnectors>
<transportConnector
name="ssl"
uri="ssl://localhost:61617?transport.enabledCipherSuites=SSL_RSA_WITH_RC4_128_SHA" />
</transportConnectors>

如上使用的是SSL_RSA_WITH_RC4_128_SHA套件。可以开启多个加密套件,使用逗号分割。

HTTP
http://hostname:port?key=value

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

http需要添加几个依赖包
commons-httpclient
xstream
xmlpull

虚拟机内部通信
Java应用程序中的VM传输连接器用于启动并连接到一个内嵌的代理.使用VM传输连接器意味着客户端和内嵌带代理之间不需要网络连接,通过直接调用代理对象的方法来实现通信.因为使用VM连接器后不需要网络协议的参与,所以性能显著提高.使用VM协议首次连接到代理时会启动代理,同一个虚拟机中所有后续的VM传输连接都将连接到这个代理.使用VM协议的代理具有标准ActiveMQ代理的所有特性.当所有使用VM传输连接到代理的客户端都关闭连接后,代理自动关闭.

配置VM连接器的URI语法如下:
vm://brokerName?key=value
如vm://broker1?marshal=false&broker.persistent=false
URI中brokerName配置非常重要,它是代理的唯一标识.例如,你可以通过配置两个不同的broker name创建两个不同的嵌入式代理,必须保证brokerName是唯一的。

还可以嵌入URI的方式
vm:broker:(transportURI,network:networkURI)/brokerName?key=value

配置的URI是
vm:broker:(tcp://localhost:6000)?brokerName=embeddedbroker&persistent=false


我们定义了一个名称为embeddedBroker的代理,同时配置了一个TCP连接器在6000端口
监听连接,而同一个jvm内运行的程序可以通过vm连接,不同jvm的外部程序,可以通过tcp://localhost:6000连接到这个代理。

通过配置传输选项的brokerConfig参数,在URI中指定activemq.xml作为配置文件,
可以使用外部配置文件来配置嵌入式代理.下面是配置例子:
vm://localhost?brokerConfig=xbean:activemq.xml
该实例的配置会在类路径中根据xbean:协议查找activemq.xml文件.通过这种方式,使用XML作为配置文件
可以像配置一个独立的代理那样来配置嵌入式代理.

网络连接器
集群的代理网络,包含了多个MQ实例。默认是单向的,代理只将其收到的消息发送到收消息连接另一头的代理,如A指接受B的代理信息,但A并不会发送消息到B,而只发送到B之外的其他。通常称为转发桥。
另外还有一种是双向的A即会接受来自B的,也会把消息发送给B。

<networkConnectors>
  <networkConnector name="default-nc" uri="multicast://default"/>
</networkConnectors>


name和uri是必须的。

侦测.通常,侦测是一种搜寻远程代理
服务的过程.通常,客户端希望能够侦测到所有可用的代理.另一方面,代理也希望能够侦测到其他可用的代理,
以便可以和他们建立一个代理网络.

静态网络连接器
静态网络连接器用于为一个网络中多个代理创建静态配置.这种配置协议使用了一种复合的URI--即包含其他URI的URI.

下面是静态协议使用的URI语法:
static:(uri1,uri2,uri3,...)?key=value
<networkConnectors>
  <networkConnector name="local network" uri="static://(tcp://remotehost1:61616,tcp://remotehost2:61616)"/>
</networkConnectors>


示例
代理B配置

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="BrokerB" dataDirectory="${activemq.base}/data">
<transportConnectors>
  <transportConnector name="openwire" uri="tcp://localhost:61617" />
</transportConnectors>
</broker>

启动代理B
${ACTIVEMQ_HOME}/bin/activemq console xbean:src/main/resources/org/apache/activemq/book/ch4/brokerB.xml

代理A配置
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="BrokerA" dataDirectory="${activemq.base}/data">
  <transportConnectors>
    <transportConnector name="openwire" uri="tcp://localhost:61616" />
  </transportConnectors>
  <networkConnectors>
    <networkConnector uri="static:(tcp://localhost:61617)" />
  </networkConnectors>
</broker>


启动代理A
${ACTIVEMQ_HOME}/bin/activemq console \xbean:src/main/resources/org/apache/activemq/book/ch4/brokerA.xml
当消息发送到代理A,代理A会向B也发送消息,消息消费者可以通过代理B接收到消息。


连接失败
失效转移连协议,有两种实现,静态的代理和动态侦测语法,
failover:(uri1,...,uriN)?key=value
或者failover:uri1,...,uriN,如
failover:(tcp://primary:61616,tcp://secondary:61616)?randomize=false

详细查看http://activemq.apache.org/failover-transport-reference.html
默认情况是先随机选择一个连接器,如果该连接器无效,那么会选择下一个。
失效转移
连接器URI:是在客户端方面的协议,客户端在链接代理时需要保证链接的可用和可靠。实际上就算客户端只会连接一个代理,也应该使用failover配置通信协议,保证网络中断等问题时会自动重连。

动态网络
这种动态技术可以实现让客户端和代理之间,代理和代理之间实现动态识别,而不是配置静态的IP组。

多点传送协议,代理会广播自己的服务,也会定位其他代理。同理客户端可以通过多点协议来接收广播,识别出代理。

多址传送协议的URI语法如下:
multicast://ipadaddress:port?key=value

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="multicast" dataDirectory="${activemq.base}/data">
  <networkConnectors>
    <networkConnector name="default-nc" uri="multicast://default"/>
  </networkConnectors>
  
  <transportConnectors>
    <transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/>
  </transportConnectors>
</broker>


在上面的例子中,使用群组名称"default"来替代具体的IP地址.上面的配置代码片段中有两个地方比较重要.首先,transport connector的discoveryUri属性用于暴露这个传输连接器的URI到名称为default的群组中.所有的希望查找可用代理的客户端都可以使用这个代理。

network connector的uri属性用于查找可用的代理并与之建立代理网络.这样配置后,代理就像客户端一样,使用多点传送协议来查找其他代理。

,移除discoveryUri属性,客户端就无法通过多点协议扫描到代理,

用多点传送协议的一个缺点是侦测是自动的.如果你不想把某个代理添加到群组中,你必须十分小心的设置。

客户端的自动侦测,通信语法是
discovery:(discoveryAgentURI)?key=value,
,如discovery:(multicast://default)
将会自动侦测组名为default的代理。
上面的配置<transportConnector name="openwire" uri="tcp://localhost:61616" discoveryUri="multicast://default"/>
将会被侦测到。

点对点协议
点对点连接器是一种传输连接器网络,是构成点对点的嵌入式代理网络中所有虚拟连接器的集合.
点对点协议的URI语法如下:
peer://peergroup/brokerName?key=value

使用一个点对点协议的RUI启动应用程序会自动启动一个嵌入式代理(就像使用VM协议一样),同时还会配置代理以和相同组名的代理之间建立网络连接.VM也会启动一个内置代理器。

peer://group1
如上客户端配置的通信协议如果是这样的话,那么会启动一个内嵌代理,并且客户端会和该内嵌代理通信,而内嵌代理会与组名是group1的代理之间建立网络通信。

FANOUT连接器
Fanout是一种通信器群组,用于使得客户端可以同时连接到多个代理并对这些代理进行相同的操作.
Fanout协议的URI语法如下:
fanout:(fanoutURI)?key=value

fanoutURI值可以使用静态的URI或者多点传送URI.参考下面的示例:
fanout:(static:(tcp://host1:61616,tcp://host2:61616,tcp://host3:61616))
客户端将尝试连接掉3个使用静态协议配置的静态代理.

使用动态效果
fanout:(multicast://default)

此协议的目的是发送消息到多个代理.其次,如果你使用的代理属于同一个代理网络,那么指定的消息消费者可能会接收到重复的消息.因此,通常情况下,fanout协议仅用于发布消息到多个相互之间没有连接在一起的代理.即多个代理之间的独立的。


总结
Protocol            Description
协议                描述
Static          Used for defining networks of brokers with known addressess
静态协议        用于定义地址已知的代理之间的网络

Failover        Used to provide reconnection logic for clients to the network of brokers or a single broker
失效重连协议    用于为客户端提供自动重连逻辑,以便客户端能够重新连接到一个代理网络或者单个代理

Multicast       Used for defining dynamic networks of brokers (broker addresses are not statically defined)
多点传送协议    用于定义一个动态的代理网络(代理的地址无需静态指定)

Discovery       Used by clients to connect to dynamic network of brokers
自动侦测协议    客户端用来连接到动态网络代理

Peer            Used to easily connect multiple embedded brokers
点对点协议      用于方便的连接到多个嵌入式代理

Fanout          Used to produce messages to multiple unconnected brokers
扇出协议        用于发送消息到多个未互联的代理
分享到:
评论

相关推荐

    ActiveMQ 配置文件详解

    **ActiveMQ配置文件详解** Apache ActiveMQ 是一个开源的消息中间件,它实现了多种消息协议,如JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol),并且广泛应用于分布式系统中,提供可靠的...

    自己实现的ActiveMQ连接池和新版本ActiveMQ自带的连接池,封装好的工具类,可直接使用

    文件zc-activemq可能是包含了作者实现的连接池代码、配置示例或其他相关文档。为了更好地利用这个资源,你需要阅读和理解代码实现,确保其符合你的系统需求。同时,测试是验证连接池性能和稳定性的关键步骤,应该在...

    ActiveMQ配置参考手册

    用于ACtiveMq 配置插件配置使用,配置介绍等,适合初学者

    Spring Boot ActiveMQ连接池配置过程解析

    Spring Boot ActiveMQ连接池配置过程解析 Spring Boot ActiveMQ连接池配置过程解析 在本文中,我们将详细介绍Spring Boot ActiveMQ连接池配置过程解析。该配置过程主要解决了Spring Boot ActiveMQ连接池中的频繁...

    ActiveMQ连接池完整封装实例工具类

    此外,还可以配置连接池的大小,如最大连接数、最小连接数、超时时间等。 2. **创建连接池**:使用PooledConnectionFactory创建连接池。通过setMaximumConnections()设置最大连接数,setIdleTimeout()设置连接空闲...

    activemq ssl双向认证连接

    4. **连接ActiveMQ**:使用ActiveMQ的Java API或客户端库(如MQTT-Demo中的MQTT协议)建立SSL连接时,你需要指定使用SSL协议并提供必要的认证信息。例如,使用Paho MQTT Java客户端库,你可以这样设置连接参数: ```...

    Spring集成ActiveMQ配置

    Spring集成ActiveMQ配置详解 Spring框架与ActiveMQ的集成,为开发者提供了一种高效、可靠的JMS消息处理机制。在企业级应用中,这种集成能够极大地提升系统的响应速度和容错能力,特别是在需要异步通信和分布式事务...

    ActiveMQ的activemq.xml详细配置讲解

    对于初学者,理解这些基本元素是掌握ActiveMQ配置的关键。配合提供的文档,如《activeMQ in Action.doc》和《ActiveMQ测试报告.pdf》,可以更深入地学习ActiveMQ的工作原理和最佳实践。对于与数据库的集成,如`...

    activemq5配置文档

    - **配置文件**:ActiveMQ的配置主要通过`activemq.xml`文件进行,这个XML文件定义了服务器的启动参数、网络连接、消息存储和安全设置等。 - **Broker配置**:Broker是ActiveMQ的核心,配置中包括了broker的名称、...

    activemq 配置说明与activemq入门讲解

    4. **网络连接**:ActiveMQ支持网络集群,通过`&lt;networkConnectors&gt;`元素配置。这允许多台ActiveMQ服务器共享消息负载,提高可用性。 5. **安全性**:在`&lt;plugins&gt;`元素下可以配置安全策略,如用户、角色和权限。...

    spring activeMQ-demo 配置

    这里,我们创建了一个ConnectionFactory,指定了连接到ActiveMQ服务器的URL,然后定义了消息的目标(Queue),并配置了一个MessageListenerContainer,用于接收和处理消息。 **三、编写MessageListener** `Message...

    activemq spring 客户端配置

    2. 配置ActiveMQ连接工厂:在Spring的配置文件(如applicationContext.xml)中定义一个JMS连接工厂bean,指定ActiveMQ服务器的URL、用户名和密码。 ```xml &lt;bean id="connectionFactory" class="org.apache....

    ActiveMQ基本使用与优化

    ActiveMQ安装与配置 - **下载安装**:从官方站点[http://activemq.apache.org/download.html](http://activemq.apache.org/download.html)下载安装包。 - **权限配置**:在Linux环境下,通过`chmod +x`命令赋予运行...

    ActiveMQ连接和使用测试工程

    此外,还可以通过调整ActiveMQ配置,如设置更大的缓存大小,优化网络连接,提高消息处理的效率。 7. **安全性与监控**:ActiveMQ支持身份验证和授权,可以通过修改`users.properties`和`groups.properties`文件来...

    ActiveMQ配置Mysql8为持久化方式所需Jar包.rar

    本主题主要探讨如何将ActiveMQ配置为使用MySQL 8作为其持久化存储方式,以及在这个过程中所需的Jar包。 1. **ActiveMQ与持久化**: - ActiveMQ允许用户选择不同的持久化机制,包括文件系统(KahaDB)和关系数据库...

    ActiveMQ消息服务配置

    #### 一、ActiveMQ配置概览 ActiveMQ是一款非常流行的开源消息中间件,它基于Java开发,支持多种消息传递模式,如点对点(P2P)、发布/订阅(Pub/Sub)等。本文将详细介绍ActiveMQ的配置要点,包括Java内存调整、主从...

    Spring集成ActiveMQ配置.docx

    Spring 集成 ActiveMQ 配置 Spring 集成 ActiveMQ 配置是指将 Spring 框架与 ActiveMQ 消息队列集成,以实现基于 JMS(Java Message Service)的消息传递。ActiveMQ 是 Apache 软件基金会的一个开源的消息队列系统...

Global site tag (gtag.js) - Google Analytics