首页 文章

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

提问于
浏览
1

我们正尝试使用自动发现和多播在Amazon EC2上的 生产环境 环境中设置活动MQ集群 . 我能够在我的本地活动mq服务器上使用多播配置成功自动发现,但在Amazon EC2上它无法正常工作 .

link我发现Amazon EC2不支持多播 . 因此,我们必须使用HTTP传输或VPN进行多播 . 我通过下载activemq-optional-5.6.jar(我们使用的是Active-MQ 5.6版本)尝试了用于多播的HTTP传输 . 它需要httpcore和httpClient jar在它的类路径中进行servlet .

在代理配置中(activemq.xml)

`
    &ltnetworkConnectors>
        &ltnetworkConnector name="default" uri="http://localhost:8161/activemq/DiscoveryRegistryServlet"/>
    </networkConnectors>

    &lttransportConnectors>
        &lttransportConnector name="activemq" uri="tcp://localhost:61616" discoveryUri="http://localhost:8161/activemq/DiscoveryRegistryServlet"/>
    </transportConnectors>`

被添加 .

但是经纪人没有识别DiscoveryRegistryServlet .

任何帮助深表感谢 .

1 回答

  • 3

    最后想出了如何使用HTTP设置主动MQ自动发现

    Active-MQ Broker configuration:

    • 在$ ACTIVEMQ_HOME / webapps文件夹中创建一个新文件夹
    |_activemq
          |_WEB-INF
                 |_classes
                 |_web.xml
    

    使用以下内容创建web.xml文件

    &ltweb-app>
    
            &ltdisplay-name>ActiveMQ Message Broker Web Application</display-name>
            &ltdescription>
                Provides an embedded ActiveMQ Message Broker embedded inside a web application
            </description>
    
            <!-- context config -->
            &ltcontext-param>
                &ltparam-name>org.apache.activemq.brokerURL</param-name>
                &ltparam-value>tcp://localhost:61617</param-value>
                &ltdescription>The URL that the embedded broker should listen on in addition to HTTP</description>
            </context-param>
            <!-- servlet mappings -->
            &ltservlet>
                &ltservlet-name>DiscoveryRegistryServlet</servlet-name>
                &ltservlet-class>org.apache.activemq.transport.discovery.http.DiscoveryRegistryServlet</servlet-class>
                &ltload-on-startup>1</load-on-startup>
            </servlet>
    
            &ltservlet-mapping>
                &ltservlet-name>DiscoveryRegistryServlet</servlet-name>
                &lturl-pattern>/*</url-pattern>
        </servlet-mapping>
        </web-app>
    
    • httpclient-4.0.3.jar, httpcore-4.3.jar, xstream-1.4.5.jar and activemq-optional-5.6.0.jar 放在 $ACTIVEMQ_HOME/lib 目录中 .

    • $ACTIVEMQ_HOME/config 目录中,修改 jetty.xml 文件以显示activemq Web应用程序 .

    &ltbean id="securityHandler" class="org.eclipse.jetty.security.ConstraintSecurityHandler">
            ...
            &ltproperty name="handler">
                    &ltbean id="sec" class="org.eclipse.jetty.server.handler.HandlerCollection">
                        &ltproperty name="handlers">
                    ...
                    ...
                    &ltbean class="org.eclipse.jetty.webapp.WebAppContext">
                                            &ltproperty name="contextPath" value="/activemq" />
                                            &ltproperty name="resourceBase" value="${activemq.home}/webapps/activemq" />
                                            &ltproperty name="logUrlOnStart" value="true" />
                                            &ltproperty name="parentLoaderPriority" value="true" />
                        ...
                        ...
                    </list>
                        </property>
                    </bean>
                </property>
            </bean>
    
    • 修改$ ACTIVEMQ_HOME / conf目录中的activemq.xml文件以使用http协议
    &ltbroker name=”brokerName”>
        ...
         &ltnetworkConnectors>
              &ltnetworkConnector name="default" uri="http://&ltloadbalancer_IP>:&ltlocadbalancer_Port>/activemq/DiscoveryRegistryServlet?group=test"/>
              <!--&ltnetworkConnector name="default-nc" uri="multicast://default"/>-->
               </networkConnectors>
    
            &lttransportConnectors>
                &lttransportConnector name="http" uri="tcp://0.0.0.0:61618" discoveryUri="http://&ltloadbalancer_IP>:&ltlocadbalancer_Port>/activemq/test"/>
            </transportConnectors>
        ...
        </broker>
    

    确保代理名称是唯一的 . url中的“test”是代理的组名 . 客户端配置:1 . 在客户端2的类路径中保留httpclient-4.0.3.jar,httpcore-4.3.jar,xstream-1.4.5.jar和activemq-optional-5.6.0.jar . 客户端使用的URL

    discovery:(http://&ltloadbalancer_IP>:&ltlocadbalancer_Port>/activemq/test)connectionTimeout=10000
    

    这里“test”是组名 .

相关问题