It looks like there is something wrong with Epoll in your system. Did you try useEpoll=false on the acceptors of the broker? it will force the netty to use java NIO instead of the native linux epoll.
Howard On Thu, Sep 5, 2019 at 9:15 PM helenoster <no-re...@klimbingspider.com> wrote: > 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 >