在Amazon EC2上使用带有多重转换的http自动发现进行活动MQ群集

时间:2013-10-22 08:03:12

标签: amazon-ec2 activemq multicast autodiscovery

我们正尝试使用自动发现和多播在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。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

最后想出了如何使用HTTP

设置主动MQ自动发现

Active-MQ Broker配置:

  1. 在$ ACTIVEMQ_HOME / webapps文件夹中创建一个新文件夹
  2. |_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>
    
    1. $中放置 httpclient-4.0.3.jar,httpcore-4.3.jar,xstream-1.4.5.jar和activemq-optional-5.6.0.jar ACTIVEMQ_HOME / lib 目录。

    2. $ ACTIVEMQ_HOME / config 目录中,修改 jetty.xml 文件以显示activemq网络应用。

    3.     <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>
      
      1. 修改$ ACTIVEMQ_HOME / conf目录中的activemq.xml文件以使用http协议
      2.     <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”是组名。