Hi.
Have now investigated more into this issue...
It turns out, if a client sets up the connecton+session FROM SCRATCH for
EVERY message sent, and then closes them right after the commit, this
warning message will appear in the client logs every now and then:
08:01:19.199 [ActiveMQ Transport: tcp:///127.0.0.1:61616@51388] WARN
org.apache.activemq.transport.failover.FailoverTransport - Transport (tcp://
127.0.0.1:61616) failed, not attempting to automatically reconnect
java.io.EOFException: null
I'm aware this is (for performance reasons) likely not the "recommended
approach" but I would also say it's NOT an ERROR to do so? ...even WITH
this approach, each msg only takes a few milliseconds to send....
Otherwise, in spite of these warnings, everything seems to work fine.
Was just a bit worrying to find this in the logs, and the client is now
rewritten to avoid this.
Below is a simple testcase to reproduce the issue.
If you let it run for a while, in our environment we consistently see this
warning (seemingly randomly) a few times for every million messages sent.
-------------------------------------
package test;
import java.time.LocalDateTime;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MapMessage;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
public class LoopJms {
public static void main(String[] args) {
new LoopJms().sendMessages();
}
private long msgId = 10000000L;
private void sendMessages() {
while (true) {
try {
String now = "" + LocalDateTime.now();
System.out.println(now + " - sending message " + msgId);
ConnectionFactory connectionFactory = new
ActiveMQConnectionFactory("failover:(tcp://127.0.0.1:61616
,tcp://127.0.0.1:61616
)?initialReconnectDelay=2000&maxReconnectDelay=2000&jms.redeliveryPolicy.maximumRedeliveries=0");
Connection connection =
connectionFactory.createConnection();
Session session = connection.createSession(true,
Session.AUTO_ACKNOWLEDGE);
MapMessage mm = session.createMapMessage();
mm.setString("id", "" + (msgId++));
mm.setString("time", now);
Queue destination = session.createQueue("queue.test");
MessageProducer producer =
session.createProducer(destination);
producer.send(mm);
session.commit();
producer.close();
session.close();
connection.close();
producer = null;
session = null;
connection = null;
connectionFactory = null;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
On Mon, Oct 21, 2024 at 12:22 PM rop <[email protected]> wrote:
> We are running an application using ActiveMQ (currently, version 5.18.3)
> with multiple queues and listeners since several years.
> Has worked fine, so far --- only, in the last week
> we are sometimes seeing Warnings like this in the log-files:
>
> 2024-10-18 14:23:07,844 [ActiveMQ Transport:
> tcp:///127.0.0.1:61616@44966][FailoverTransport:283]
> WARN org.apache.activemq.transport.failover.FailoverTransport - Transport
> (tcp://127.0.0.1:61616) failed, not attempting to automatically reconnect
> java.io.EOFException: null
> at
> java.base/java.io.DataInputStream.readFully(DataInputStream.java:210)
> at
> java.base/java.io.DataInputStream.readInt(DataInputStream.java:385)
> at
> org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:280)
> at
> org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:240)
> at
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:232)
> at
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)
> at java.base/java.lang.Thread.run(Thread.java:1583)
>
> Evertyhing still seems to work fine without issues.
> I'm just a bit concerned what is causing these warnings?
>
> Anyone can explain what's going on?
>