在 Travis 中使用 ActiveMQ CI

Use ActiveMQ in Travis CI

我在 Travis CI 中的 build 在 Active MQ 上添加配置后失败。

Travis CI 的日志显示:

Caused by: javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36)
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:360)
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:305)
    at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:245)
    at org.springframework.jms.connection.SingleConnectionFactory.doCreateConnection(SingleConnectionFactory.java:365)
    at org.springframework.jms.connection.SingleConnectionFactory.initConnection(SingleConnectionFactory.java:305)
    at org.springframework.jms.connection.SingleConnectionFactory.getConnection(SingleConnectionFactory.java:283)
    at org.springframework.jms.connection.SingleConnectionFactory.createConnection(SingleConnectionFactory.java:224)
    at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:180)
    at org.springframework.jms.listener.AbstractJmsListeningContainer.createSharedConnection(AbstractJmsListeningContainer.java:413)
    at org.springframework.jms.listener.AbstractJmsListeningContainer.establishSharedConnection(AbstractJmsListeningContainer.java:381)
    at org.springframework.jms.listener.AbstractJmsListeningContainer.doStart(AbstractJmsListeningContainer.java:285)
    at org.springframework.jms.listener.SimpleMessageListenerContainer.doStart(SimpleMessageListenerContainer.java:209)
    at org.springframework.jms.listener.AbstractJmsListeningContainer.start(AbstractJmsListeningContainer.java:270)
    ... 44 more

我正在使用 Spring MVC,这是用于测试的配置:

<beans "Some DTDs here">
    <!-- Base Components -->
    <context:annotation-config />
    <context:component-scan base-package="com.trunkshell.voj" />

    <!-- Some other configuration for JDBC and other service -->

    <!-- Message Service -->
    <bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <constructor-arg index="0" value="tcp://localhost:61616"/>
    </bean>
    <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <constructor-arg ref="amqConnectionFactory" />
    </bean> 
    <bean id="defaultDestination" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg index="0" value="vojMessageQueue"/>
    </bean>     
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="defaultDestination" ref="defaultDestination" />
    </bean>
    <bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="destinationName" value="vojMessageQueue" />
        <property name="messageListener" ref="messageReceiver" />
    </bean> 
    <bean id="messageSender" class="com.trunkshell.voj.util.MessageSender"></bean>
    <bean id="messageReceiver" class="com.trunkshell.voj.util.MessageReceiver"></bean>
</beans>

我还注意到 Travis CI 只支持 RabbitMQ 和 ZeroMQ。 这是参考:link

那么我应该怎么做才能修复 Travis 中的错误 CI?

或者如何在 Travis 中跳过这个问题 CI。

我没有看到您实际上在端口 61616 上启动了 ActiveMQ 代理。要么这样做,要么最好在集成测试期间使用 VM 传输。 IE。将 tcp://localhost:61616 更改为 vm://localhost?broker.persistent=false

当然,当您部署到生产环境时,您必须能够更改 ActiveMQ URL。也许你可以使用 spring 属性 占位符?