We have a spring-boot application that has to connect to a deployed Apache
Apache ActiveMQ Artemis 2.9.0 broker. The broker is running on a Red Hat
Enterprise Linux 7.6 and the client should run in a docker, but doing
running it without docker we have got the same issue.

The broker has the default configuration listening to the 61616 port.

We're not able to communicate to the broker from the spring-boot applcation.
It looks like it is even to starting the call. 


Here some more details about the code:
We've got a library where we've encapsulated the calls to the broker. The
pom.xml is as follows:

<project xmlns="http://maven.apache.org/POM/4.0.0";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd";>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.xxx.ems.microservice.core</groupId>
  <artifactId>ems-ms-core-library</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>EMSMSCoreLibrary</name>
  <url>http://maven.apache.org</url>
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/>
  </parent>  
  <properties>
      <maven.compiler.target>1.8</maven.compiler.target>
      <maven.compiler.source>1.8</maven.compiler.source>
  </properties>
  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <exclusions>
              <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
              </exclusion>
          </exclusions>
      </dependency>

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
          <exclusions>
              <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
              </exclusion>
          </exclusions>
      </dependency>

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-artemis</artifactId>
      </dependency>
      <dependency>
          <groupId>org.apache.activemq</groupId>
          <artifactId>artemis-jms-server</artifactId>
      </dependency>
    <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
      </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
        </dependency>           
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <scope>test</scope>
      </dependency>

        <dependency>
            <groupId>co.elastic.apm</groupId>
            <artifactId>apm-agent-api</artifactId>
            <version>1.7.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>   
        <dependency>
            <groupId>com.jcabi</groupId>
            <artifactId>jcabi-manifests</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
  </dependencies>
</project>

Our configuration file includes the following lines to connect to the
artemis broker:

spring:
  artemis:
     mode: native
     host: myhost
     port: 61616
  # Spring JMS Settings
  jms:
    template:
      qos-enabled: true

Here we include the method we're using to send the messages

package com.xxx.ems.microservice.core.queue;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.UncategorizedJmsException;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.stereotype.Component;

// Apache Artemis Message Sender
@Component
@EnableJms
public class MessageSender {
    @Autowired
    JmsTemplate jmsTemplate;

    @Autowired
    MessageConverter defaultMessageConverter;

    protected void send(String destinationQueue, EMSFileMessage
emsFileMessage, int ... priority) throws EMSQueueException{
        try{
            if (priority.length == 0){
                jmsTemplate.convertAndSend(destinationQueue,
emsFileMessage);
            }else{
                jmsTemplate.setPriority(priority[0]);
                jmsTemplate.send(destinationQueue, new MessageCreator() {
                    @Override
                    public Message createMessage(Session session) throws
JMSException {
                        return
defaultMessageConverter.toMessage(emsFileMessage, session);
                    }
                });
            }
        }catch(UncategorizedJmsException ex){
            throw new EMSQueueException("Fatall error, probably due to
connection with message broker, address that is trying to connect with
address "+destinationQueue, ex);
        }
    }
}

Before calling the send message we're writing a log to check the
ArtemisProperties (host and port) and both have the proper values. The
destinationQueue has also the correct value.



For some reason we've got the following exception:

com.xxx.ems.microservice.core.queue.EMSQueueException: Fatall error,
probably due to connection with message broker, address that is trying to
connect with address ems.gnfr
    at
com.xxx.ems.microservice.core.queue.MessageSender.send(MessageSender.java:56)
~[classes/:?]
    at
com.xxx.ems.microservice.core.queue.MessageDispatcher.sendFile(MessageDispatcher.java:41)
~[classes/:?]
    at
com.xxx.ems.microservice.core.queue.MessageDispatcher.send(MessageDispatcher.java:33)
~[classes/:?]
    at
com.xxx.ems.microservice.msdiskloader.controller.DiskLoaderController.processSingleFile(DiskLoaderController.java:64)
~[classes/:?]
    at
com.xxx.ems.microservice.msdiskloader.controller.DiskLoaderController$$FastClassBySpringCGLIB$$7f37b3f5.invoke(<generated>)
~[classes/:?]
    at
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
~[spring-core-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
~[spring-aop-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
~[spring-aop-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
~[spring-aop-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
com.xxx.ems.microservice.core.apm.aspects.AspectTransactionStarter.doMessageReception(AspectTransactionStarter.java:24)
~[classes/:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[?:1.8.0_221]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
~[?:1.8.0_221]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
~[?:1.8.0_221]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_221]
    at
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
~[spring-aop-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
~[spring-aop-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
~[spring-aop-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
~[spring-aop-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
~[spring-aop-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
~[spring-aop-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
~[spring-aop-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
com.xxx.ems.microservice.msdiskloader.controller.DiskLoaderController$$EnhancerBySpringCGLIB$$eca14b7b.processSingleFile(<generated>)
~[classes/:?]
    at
com.xxx.ems.microservice.msdiskloader.utils.DirectoryChangesWatcher.lambda$proccesExistingFilesInPath$2(DirectoryChangesWatcher.java:249)
~[classes/:?]
    at java.lang.Iterable.forEach(Unknown Source) ~[?:1.8.0_221]
    at
com.xxx.ems.microservice.msdiskloader.utils.DirectoryChangesWatcher.proccesExistingFilesInPath(DirectoryChangesWatcher.java:249)
~[classes/:?]
    at
com.xxx.ems.microservice.msdiskloader.utils.DirectoryChangesWatcher.startWatchingFolder(DirectoryChangesWatcher.java:94)
~[classes/:?]
    at
com.xxx.ems.microservice.msdiskloader.controller.DiskLoaderController.onApplicationStart(DiskLoaderController.java:46)
~[classes/:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[?:1.8.0_221]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
~[?:1.8.0_221]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
~[?:1.8.0_221]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_221]
    at
org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:414)
~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770)
~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845)
[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
[spring-context-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
[spring-context-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:742)
[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:389)
[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at
org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at
org.springframework.boot.SpringApplication.run(SpringApplication.java:1213)
[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at
org.springframework.boot.SpringApplication.run(SpringApplication.java:1202)
[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
    at
com.xxx.ems.microservice.core.app.EMSMicroserviceApplication.run(EMSMicroserviceApplication.java:10)
[classes/:?]
    at
com.xxx.ems.microservice.msdiskloader.MicroserviceApplication.main(MicroserviceApplication.java:18)
[classes/:?]
Caused by: org.springframework.jms.UncategorizedJmsException: Uncategorized
exception occurred during JMS processing; nested exception is
javax.jms.JMSException: Failed to create session factory; nested exception
is ActiveMQNotConnectedException[errorType=NOT_CONNECTED message=AMQ219007:
Cannot connect to server(s). Tried with all available servers.]
    at
org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:311)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:185)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:507)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:584)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:661)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
com.xxx.ems.microservice.core.queue.MessageSender.send(MessageSender.java:45)
~[classes/:?]
    ... 52 more
Caused by: javax.jms.JMSException: Failed to create session factory
    at
org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:846)
~[artemis-jms-client-2.6.4.jar:2.6.4]
    at
org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:282)
~[artemis-jms-client-2.6.4.jar:2.6.4]
    at
org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:277)
~[artemis-jms-client-2.6.4.jar:2.6.4]
    at
org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:196)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:494)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:584)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:661)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
com.xxx.ems.microservice.core.queue.MessageSender.send(MessageSender.java:45)
~[classes/:?]
    ... 52 more
Caused by:
org.apache.activemq.artemis.api.core.ActiveMQNotConnectedException:
AMQ219007: Cannot connect to server(s). Tried with all available servers.
    at
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:797)
~[artemis-core-client-2.6.4.jar:2.6.4]
    at
org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:844)
~[artemis-jms-client-2.6.4.jar:2.6.4]
    at
org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:282)
~[artemis-jms-client-2.6.4.jar:2.6.4]
    at
org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:277)
~[artemis-jms-client-2.6.4.jar:2.6.4]
    at
org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:196)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:494)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:584)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:661)
~[spring-jms-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at
com.xxx.ems.microservice.core.queue.MessageSender.send(MessageSender.java:45)
~[classes/:?]
    ... 52 more

We have seen another exception with debug level about
netty_transport_native_epoll_x86_64

        Unable to load the library 'netty_transport_native_epoll_x86_64', trying
other loading mechanism.
        java.lang.UnsatisfiedLinkError: no netty_transport_native_epoll_x86_64 
in
java.library.path

We've asked the netty team (https://github.com/netty/netty/issues/9537) and
they commented that there is no relation between the
netty_transport_native_epoll_x86_64 and the communication from Artemis. The
application should be working.
We have captured the packets received in the network in the machine where
the Apache ActiveMQ Artemis is installed and we don't receive any packet.
However, a telnet to the port works and a couple of packets are captured. So
the shouldn't be any firewall issues. 
We have done a test creating a tunnel to the machine where the spring-boot
aplication should be running and forwarding the call to the broker machine.
Running the spring-boot application in windows works well and we see
messages in the broker dashboard. 

As commented above, the application should be running in a docker, we have
tested using  koosiedemoer/netty-tcnative-alpine and openjdk:8-jdk-alpine 
as base images. The docker is able to communicate with an elastic-apm
service installed in the same machine as the Apache ActiveMQ Artemis. 
For some reason it is not able to establish communication when the software
runs Red Hat Enterprise Linux 7.6 and java 1.8.0_221, neither when we run it
from a docker image.

Is there anything that should be installed, another base-image that should
be used? 
We're new with artemis and such kind of brokers and the logs doesn't give us
any clue to solve the issue. Any help would be appreciated




--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html

Reply via email to