Question

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 ?

Was it helpful?

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>

OTHER TIPS

This is how you can enable http proxy in ActiveMQ if you don't use xml configuration:

  1. Add activemq-http library to the classpath (https://mvnrepository.com/artifact/org.apache.activemq/activemq-http)

  2. Add proxyHost and proxyPort as URI parameters and create connection factory with that 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();
    
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top