我们正尝试使用自动发现和多播在Amazon EC2上的生产环境中设置活动MQ群集。 我能够在我的本地活动mq服务器上使用multi-cast成功配置自动发现,但在Amazon EC2上它无法正常工作。
来自link 我发现Amazon EC2不支持多播。因此,我们必须使用HTTP传输或VPN进行多播。我通过下载activemq-optional-5.6.jar(我们使用的是Active-MQ 5.6版本)尝试了用于多播的HTTP传输。它需要httpcore和httpClient jar在它的类路径中进行servlet。
在代理配置(activemq.xml)
中` <networkConnectors> <networkConnector name="default" uri="http://localhost:8161/activemq/DiscoveryRegistryServlet"/> </networkConnectors> <transportConnectors> <transportConnector name="activemq" uri="tcp://localhost:61616" discoveryUri="http://localhost:8161/activemq/DiscoveryRegistryServlet"/> </transportConnectors>`
已添加。
但是经纪人没有识别DiscoveryRegistryServlet。
非常感谢任何帮助。
答案 0 :(得分:3)
最后想出了如何使用HTTP
设置主动MQ自动发现Active-MQ Broker配置:
|_activemq |_WEB-INF |_classes |_web.xml
使用以下内容创建web.xml文件
<web-app> <display-name>ActiveMQ Message Broker Web Application</display-name> <description> Provides an embedded ActiveMQ Message Broker embedded inside a web application </description> <!-- context config --> <context-param> <param-name>org.apache.activemq.brokerURL</param-name> <param-value>tcp://localhost:61617</param-value> <description>The URL that the embedded broker should listen on in addition to HTTP</description> </context-param> <!-- servlet mappings --> <servlet> <servlet-name>DiscoveryRegistryServlet</servlet-name> <servlet-class>org.apache.activemq.transport.discovery.http.DiscoveryRegistryServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DiscoveryRegistryServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
在 $中放置 httpclient-4.0.3.jar,httpcore-4.3.jar,xstream-1.4.5.jar和activemq-optional-5.6.0.jar ACTIVEMQ_HOME / lib 目录。
在 $ ACTIVEMQ_HOME / config 目录中,修改 jetty.xml 文件以显示activemq网络应用。
<bean id="securityHandler" class="org.eclipse.jetty.security.ConstraintSecurityHandler"> ... <property name="handler"> <bean id="sec" class="org.eclipse.jetty.server.handler.HandlerCollection"> <property name="handlers"> ... ... <bean class="org.eclipse.jetty.webapp.WebAppContext"> <property name="contextPath" value="/activemq" /> <property name="resourceBase" value="${activemq.home}/webapps/activemq" /> <property name="logUrlOnStart" value="true" /> <property name="parentLoaderPriority" value="true" /> ... ... </list> </property> </bean> </property> </bean>
<broker name=”brokerName”> ... <networkConnectors> <networkConnector name="default" uri="http://<loadbalancer_IP>:<locadbalancer_Port>/activemq/DiscoveryRegistryServlet?group=test"/> <!--<networkConnector name="default-nc" uri="multicast://default"/>--> </networkConnectors> <transportConnectors> <transportConnector name="http" uri="tcp://0.0.0.0:61618" discoveryUri="http://<loadbalancer_IP>:<locadbalancer_Port>/activemq/test"/> </transportConnectors> ... </broker>
确保代理名称是唯一的。 url中的“test”是代理的组名。 客户端配置: 1.在客户端的类路径中保留httpclient-4.0.3.jar,httpcore-4.3.jar,xstream-1.4.5.jar和activemq-optional-5.6.0.jar 2.客户端使用的URL
discovery:(http://<loadbalancer_IP>:<locadbalancer_Port>/activemq/test)connectionTimeout=10000
这里“test”是组名。