Spring boot Activemq Транспортное соединение не удалось: java .io.EOFException - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть приложение Spring Boot 2.2.6. Я использую spring-boot-starter-activemq (active-mq 5.15.12)

Я пытаюсь настроить 2 брокера, один основной и один дополнительный:

broker.url: "failover:(tcp://192.168.0.28:61616,tcp://localhost:61616)?randomize=false&priorityBackup=true"

Но если первичный отказывает (я останавливаю посредника activemq), у меня есть исключение, и он никогда не переключается на вторичный

WARN  - Transport (tcp://192.168.0.28:61616) failed , attempting to automatically reconnect: {} 
java.io.EOFException: null
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:268)
    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.lang.Thread.run(Thread.java:748)

Если я запускаю приложение без первичного и затем включаю первичный, у меня также есть исключение и никакое сообщение не отправлено и не получено (даже если оно говорит, что оно успешно переподключено)

WARN  - Transport Connection to: tcp://127.0.0.1:61179 failed: java.io.EOFException 
INFO  - Successfully reconnected to tcp://192.168.0.28:61616 

Любая помощь приветствуется

1 Ответ

0 голосов
/ 07 апреля 2020

Моя проблема заключалась в том, что я использовал приложение для моего журнала.

public class LogAppender extends AppenderBase<ILoggingEvent> implements CommandLineRunner 

Это приложение опубликовало sh журнал для посредника

@Override
protected void append(ILoggingEvent event) {
    ServerLogLine log = new ServerLogLine(event);
    if (logPublisher != null) {
        logPublisher.publish(log);
    }
}

Но с возможностью переключения при сбое, когда брокер останавливается, класс FailoverTransport отправляет LOG:

LOG.warn("Transport ({}) failed {} attempting to automatically reconnect: {}",
                     connectedTransportURI, (reconnectOk ? "," : ", not"), e);

И из-за моего LogAppender программа блокирует здесь.

Исправление в методе init LogAppender:

// Remove log level for activemq
logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("org.apache.activemq");
logger.setLevel(Level.toLevel("OFF"));
...