Artemis activeMQ не работает с весенними интеграционными тестами - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь использовать artemis activeMQ со встроенным режимом в тестах интеграции загрузки Spring, но когда я отправляю сообщение, оно не может его получить. Я использую собственный режим, и он работает хорошо, но это не тот случай, когда я запускаю интеграционные тесты (встроенные).

Вот мой applications-test.properties (источник / тест / ресурсы):

spring.artemis.mode=embedded
spring.artemis.host=localhost
spring.artemis.port=61616
spring.artemis.user=exampleuser
spring.artemis.password=examplepassword
spring.artemis.embedded.topics=exampleTopic,exampleTopic2
jms.queue.destination=exampleQueue
spring.jms.pub-sub-domain=true

My broker.xml.bak (источник / тест / ресурсы):

<?xml version='1.0'?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:activemq" xsi:schemaLocation="urn:activemq /schema/artemis-server.xsd">
<jms xmlns="urn:activemq:jms">
    <!--the queue used by the example -->
    <queue name="exampleQueue" />
</jms>

<core xmlns="urn:activemq:core">

    <persistence-enabled>false</persistence-enabled>
    <journal-type>NIO</journal-type>

    <!-- Acceptors -->
    <acceptors>
        <acceptor name="netty">tcp://localhost:61616</acceptor>
    </acceptors>

    <!-- Other config -->

    <security-settings>
        <!--security for example queue -->
        <security-setting match="#">
            <permission type="createDurableQueue" roles="example" />
            <permission type="deleteDurableQueue" roles="example" />
            <permission type="createNonDurableQueue" roles="example" />
            <permission type="deleteNonDurableQueue" roles="example" />
            <permission type="consume" roles="example" />
            <permission type="send" roles="example" />
        </security-setting>
    </security-settings>

</core>
</configuration>

Производитель jms-сообщения Класс:

@Component
public class JmsProducer {

  @Autowired
  private
  JmsTemplate jmsTemplate;

  @Value("${jms.queue.destination}")
  private String destinationQueue;

  public void send(String msg){
      getJmsTemplate().convertAndSend(destinationQueue, msg);
  }

  public JmsTemplate getJmsTemplate() {
      return jmsTemplate;
  }
 }

Вот класс интеграционных испытаний:

@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource(locations = {"/application-test.properties","/broker.xml.bak"})
public class outilConverterApplicationTests {

@Autowired
private JmsProducer producer;

@Autowired
private ArtemisProperties artemisProperties;

@Before
public void init(){
    customizer();
}

public ArtemisConfigurationCustomizer customizer() {
    return new ArtemisConfigurationCustomizer() {

        @Override
        public void customize(org.apache.activemq.artemis.core.config.Configuration configuration) {
            try {
                configuration.addAcceptorConfiguration("netty", "tcp://localhost:" + artemisProperties.getPort());

            } catch (Exception e) {
                throw new RuntimeException("Failed to add netty transport acceptor to artemis instance", e);
            }

        }

    };
}

@Test
public void send(){
    producer.send("MyMessage");
    producer.getJmsTemplate().setReceiveTimeout(20_000);
    assertThat(producer.getJmsTemplate().receiveAndConvert("exampleQueue")).isEqualTo("MyMessage");
}
}

Ошибка трассировки Junit Contole:

org.junit.ComparisonFailure: expected:<"MyMessage"> but was:<null>

1 Ответ

0 голосов
/ 26 апреля 2018

Я установил DefaultDestinationName для JmsTemplate:

jmsTemplate.setDefaultDestinationName("exampleQueue");

Также я изменяю в application-test.properties:

spring.jms.pub-sub-domain=false

Наконец, все работает хорошо.

...