概述:broker(代理商)之间传递消息,以及broker和客户端传递消息,需要各种协议,也就是连接方式,本章就是涉及连接方式
本章涉及:
- ConnectorURIs(URI统一资源标识符),标识代理商地址
- Transport connectiors(传输连接),代理商暴露地址给客户端
- Network connectors(网络连接),代理商之间消息传递
- Discovery Agents(发现代理),发现集群中某些代理商
- 介绍一些常用的连接器
4.1、理解连接器URIS
URIs就是统一资源标识符, 简单来说用一个字符串表示资源位置(在网络中是独一无二的)
规范:http://www.ietf.org/rfc/rfc2396.txt
它的格式为:<scheme>:<scheme-specific-part> ,例如 mailto:users@activemq.apache.org
或者格式为:<scheme>://<authority><path><?query> 例如:http://www.baidu.com?ara=0
例如ActiveMQ 常见: tcp://localhost:61616?trace=true
配置多个 static://(tcp://host1:61616,tcp://host2:61616)
4.2、配置传输连接器
配置文件在 {ActiveMQ HOME}/config/activemq.xml 里面的片段
<!-- The transport connectors ActiveMQ will listen to -->
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616"
discoveryUri="multicast://default"/>
<transportConnector name="ssl" uri="ssl://localhost:61617"/>
<transportConnector name="stomp" uri="stomp://localhost:61613"/>
<transportConnector name="xmpp" uri="xmpp://localhost:61222"/>
</transportConnectors>
<transportConnector>表示各种连接器, 以上有tcp 、ssl、stomp、xmpp
4.2.1. 使用传输连接器
4.2.2.使用网络协议
4.2.2.1 TCP协议(Transmission Control Protocol)
具体规范:http://tools.ietf.org/html/rfc793
语法:tcp://hostname:port?key=value&key=value
向配置文件添加:
<transportConnectors>
<transportConnector
name="tcp"
uri="tcp://localhost:61616?trace=true"
/>
</transportConnectors>
4.2.2.2. New I/O API 协议(NIO)
语法: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>
4.2.2.3.使用UDP(User Datagram Protocol)
语法: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>
4.2.2.4.SSL(Secure Sockets Layer Protocol)
语法:ssl://hostname:port?key=value
Java Secure Socket Extension(JSSE)规范:
http://docs.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html
<transportConnectors>
<transportConnector
name="tcp"
uri="tcp://localhost:61616?trace=true"
/>
<transportConnector
name="ssl"
uri="ssl://localhost:61617?trace=true"
/>
</transportConnectors>
4.2.2.5 HTTP/HTTPS(Hypertext Transfer Protocol)
语法:http://hostname:port?key=value 或 https://hostname:port?key=value
<transportConnectors>
<transportConnector
name="tcp"
uri="tcp://localhost:61616?trace=true"
/>
<transportConnector
name="http"
uri="http://localhost:8080?trace=true"
/>
</transportConnectors>
4.2.3,使用虚拟机协议(Virtual Machine Protocol)
4.2.3.1. VM Protocol(虚拟机协议)
虚拟机内部嵌broker
语法:vm://brokerName?key=value
例如:vm://localhost?brokerConfig=xbean:activemq.xml
4.3.配置网络连接器
4.3.1、定义Static网络
4.3.1.1. Static协议
语法 static:(uri1,uri2,uri3,...)?key=value
<networkConnectors>
<networkConnector name="local network"
uri="static://(tcp://remotehost1:61616,tcp://remotehost2:61616)"/>
</networkConnectors>
4.3.1.2. Failover 协议
语法:failover:(uri1,...,uriN)?key=value
当连接失败,连接其他url
例如:failover:(tcp://host1:61616,tcp://host2:61616)
4.3.2. 定义动态网络
4.3.2.1. Multicast 协议
通过IP分组发送消息
语法:multicast://ipaddress: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>
4.3.2.2. Discovery 协议
自动发现连接
语法:discovery:(discoveryAgentURI)?key=value
例如:discovery:(multicast://default)
4.3.2.3. Peer 协议
语法:peer://peergroup/brokerName?key=value
两个虚拟机内嵌broker之间通讯
4.3.2.4. Fanout 协议
表示同时向多个broker发送消息
语法:fanout:(fanoutURI)?key=value
例如:fanout:(static:(tcp://host1:61616,tcp://host2:61616,tcp://host3:61616))
fanout:(multicast://default)