activemq http代理

Posted

技术标签:

【中文标题】activemq http代理【英文标题】:activemq http proxy 【发布时间】:2013-01-01 23:18:14 【问题描述】:

我需要通过 HTTP/HTTPS 代理将 ActiveMQ 侦听器连接到防火墙外的代理。我到处搜索,但没有找到如何为 AcitveMQ-Client 设置代理设置的解决方案。

ActiveMQ 正在使用 Apache HttpClient,但我不知道如何在 ActiveMQ 中操作此客户端的创建。 HttpClient不使用htttps.proxyHost和https.proxyPort。

有没有办法为所有 HttpClient 实例设置全局 http/https 代理?

【问题讨论】:

【参考方案1】:

ActiveMQ HttpClientTransport 包含以下可用于指定代理主机和端口的方法:

public void setProxyHost(String proxyHost)
public void setProxyPort(int proxyPort)

对于 5.6+ 版本,您还可以提供代理用户名和密码:

public void setProxyUser(String proxyUser)
public void setProxyPassword(String proxyPassword)

配置 JmsInvokerProxyFactoryBean:

<bean id="jmsClientFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL">
      <value>http://myendpoint.somewhere.com:5186?proxyUser=fred&amp;proxyPassword=ahoy&amp;proxyHost=myproxyhost.somewhere.com&amp;proxyPort=8081</value>
    </property>
</bean>


<bean id="remotingService"
        class="org.springframework.jms.remoting.JmsInvokerProxyFactoryBean">
      <property name="serviceInterface" value="com.foo.CheckingAccountService"/>
      <property name="connectionFactory" ref="jmsClientFactory"/>
      <property name="queue" ref="queue"/>
   </bean>

【讨论】:

谢谢,但是我怎样才能让我的 Httpclienttransport 的实例来设置代理。我正在使用 Springs JmsInvokerProxyFactoryBean,但我不知道 Httpclienttransport 是在哪里创建的以及如何访问 Activemq 中的实例? 您好,我正在使用 ActiveMQConnectionFactory 创建使用 JmsTemplate 的连接。我需要连接到代理服务器后面的 activeMq。您能否让我知道如何将代理详细信息设置为 activemqConection。我们正在使用 tcp trasport 连接与 activemq 进行通信。提前感谢您的帮助。 我认为 TCP 传输不支持代理。有一个未解决的问题可以支持这一点:issues.apache.org/jira/plugins/servlet/mobile#issue/AMQ-2678 嗨,有没有办法使用 http trasport 通过代理连接。在您提到的帖子中,我们可以使用 HttpClinetTrasport。但我不确定如何将 HttpClientTrasport 设置为 ActiveMqConnection 对象。请让我知道我们如何做到这一点。 @Nicholas 请让我知道有没有办法使用 http trasport 通过代理进行连接。在您提到的帖子中,我们可以使用 HttpClinetTrasport。但我不确定如何将 HttpClientTrasport 设置为 ActiveMqConnection 对象。请让我知道您的意见。谢谢【参考方案2】:

如果不使用 xml 配置,这就是在 ActiveMQ 中启用 http 代理的方法:

    将 activemq-http 库添加到类路径 (https://mvnrepository.com/artifact/org.apache.activemq/activemq-http)

    添加 proxyHostproxyPort 作为 URI 参数并使用该 URI 创建连接工厂:

    URI brokerUri = new URI("http://host:port");
    Map<String, String> additionalParameters = new HashMap<>();
    additionalParameters.put("proxyHost", "localhost");
    additionalParameters.put("proxyPort", "8888");
    additionalParameters.put("proxyUser", "xxxx"); // optional
    additionalParameters.put("proxyPassword", "xxxx"); // optional
    brokerUri = org.apache.activemq.util.URISupport.applyParameters(brokerUri, additionalParameters);
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUri);
    Connection connection = connectionFactory.createConnection();
    

【讨论】:

以上是关于activemq http代理的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ActiveMq 嵌入式代理上启用 Web 控制台

使用 Spring Boot 配置 ActiveMQ

JMS/Active MQ - 代理与消费者重新交付

如何使用 Spring 嵌入式 ActiveMQ 代理指定自定义 activemq.xml?

ActiveMQ:'channel inactive for too long' 异常停止代理消息传递

ActiveMQ实战-集群