Search code examples
javajakarta-eejmsactivemq-classichttp-proxy

activemq http proxy


I need to connect a ActiveMQ-Listener to a broker outside the firewall through an HTTP/HTTPS-Proxy. I've searched everywhere but haven't found a solution how to set the proxy settings for the AcitveMQ-Client.

ActiveMQ is using Apache HttpClient but I don't know how to manipulate the creation of this client within ActiveMQ. The use of htttps.proxyHost and https.proxyPort is not used by the HttpClient.

Is there a way to set a global http/https proxy for all instances of HttpClient ?


Solution

  • The ActiveMQ HttpClientTransport contains the following methods you can use to specify the proxy host and port:

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

    For version 5.6+ you can also provide the proxy username and password:

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

    To configure a 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>