`
liyixing1
  • 浏览: 939808 次
  • 性别: 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 配置插件配置使用,配置介绍等,适合初学者

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

    主要介绍了Spring Boot ActiveMQ连接池配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    activemq ssl双向认证连接

    使用activemq依赖库连接, 该项目为java工程,内有ssl证书生成方式链接,不清楚可私信

    ActiveMQ基本使用与优化

    JMS是一种与厂商无关的 API,用来访问消息收发系统消息。它类似于JDBC(Java Database Connectivity),提供了应用程序之间异步通信的功能。 本文档介绍ActiveMQ的基本使用和部分性能优化。

    activemq-5.15+mysqljdbc配置.zip

    activeMQ-5.15版本,里面更改了activeMQ配置,新增了mysql的连接内容。lib里添加了durid和mysql连接的jar文件

    ActiveMQ_使用failover模式进行连接切换时,线程断开

    ActiveMQ_使用failover模式进行连接切换时,线程断开 ,ActiveMQ_使用failover模式进行连接切换时,线程断开

    activeMQ使用JDBC所需要的jar包

    使用activeMQ进行持久化时,所需要的相关jar包,mysql驱动、连接池等jar包

    java springboot整合activemq工程

    #activemq配置 #默认情况下activemq提供的是queue模式 true是可以使用topic,false是仅使用queue模式 spring.jms.pub-sub-domain: true # 设置连接的activemq服务器 spring.activemq.broker-url=failover:(tcp://...

    springmvc整合activemq消息队列Demo

    该demo在本地启动activemq后放在tomcat中可直接运行,不需要修改配置,连接远程的activemq需要手动修改applicationContext.xml中的activemq连接地址,jdk1.8

    消息队列中间件ActiveMQ入门到精通视频教程及资料

    001-ActiveMQ基础;...activemq集群配置文档.pdf;ActiveMQ(中文)参考手册.doc;ActiveMQ集群:网络连接模式(network connector)详解.docx;ActiveMQ集群:网络连接模式(network connector)详解.docx;示例;

    ActiveMQ Failover Transport Options

    ActiveMQ Failover 故障处理连接方式的参数配置 在MQ连接的URI中配置。

    ActiveMQ.rar

    一: ActiveMQ简介 包括:是什么、能干什么、特点;消息中间件的功能、特点、应用场景等 n 二: ActiveMQ安装和基本使用 包括:通过源码安装、基本的配置示例...包括:影响ActiveMQ性能的因素、常见的优化方式和配置等

    Java消息中间件ActiveMQ学习资料

    资源内容:ActiveMQ(中文)参考手册;ActiveMQ集群:网络连接模式(network connector)详解;生产者消费者模式实现代码;activemq集群配置文档;

    activeMQ-authenticationPlugin:用于activeMQ服务端的连接验证插件,可以支持多验证方式:远程连接验证,IP,MAC

    ActiveMQ插件,用于连接验证 在外部activeMQ服务器中加入验证插件:插件加入地址为activeMQ/lib activeMQ.xml植入的配置文件 &lt; value&gt;http://127.0.0.1:8082/activeMQ/checkSecret&lt;/

    逆向工程极速搭建SSM-Redis-activeMQ-Quartz整合项目

    配置控制生成输出文件(listenter、filter、quartz、activeMQ、redis、webXml、initXml、contextXml) 项目可统计在线人数,无操作超时退出,监听网络请求,配置log4j、数据库连接等文件; 自动封装sql语句,自动...

    activemq-5.12-test

    代理的完整配置可以修改,因为它们是共享目录: conf /主 conf /从属 数据和日志位于conf / data目录中。 数据持久性可以通过KahaDB文件数据库来实现,也可以通过PostgreSQL数据库来实现。 还可以使用haproxy...

    java8stream源码-reactivemq:一个基于Akka的ActiveMQ客户端

    在这一点上,它是一个相当低级的面向连接的接口,可以使用 AMQ 队列和主题,将消息发送到端点,并使用临时队列执行请求-回复消息,Camel 风格。 将根据需要/要求添加更多功能。 关于什么 ? Camel 提供了大量组件,...

    tr-test:atomikos spring activemq jta oracle

    测试atomikos spring activemq jta oracle 为了最大限度地恢复和关闭/重启能力,强烈建议您使用以下 init 依赖项配置 Spring 配置: 使事务管理器依赖于您所有的 JDBC 和 JMS 连接工厂:这可确保在关闭期间事务管理...

    springboot常用框架

    内置对象、显示对象信息、文件上传、使用文件服务器、拦截器、配置druid数据库连接池、整合MyBatis框架、事务控制、Druid监控、整合ActiveMQ、 整合RabbitMQ、整合kafka、邮件发送、定时调度、Actuator监控、 整合...

    开发相关jar包,nosql,jdom,netty,mysql,连接池

    activemq-all-5.5.1.jar,aopalliance-1.0.jar,aspectj-1.8.6.jar,aspectjweaver.jar,bson-3.0.2.jar,c3p0-0.9.1.jar,commons-beanutils-1.8.3.jar,commons-collections-3.2.1.jar,commons-dbcp-1.4.jar,commons-io-...

Global site tag (gtag.js) - Google Analytics