Saya telah bolak-balik dengan masalah pada sistem kami yang bahkan dengan beberapa penelitian di forum dan beberapa tes, kami sepertinya tidak dapat memperbaikinya.
Saya akan mencoba menjelaskan sejelas mungkin tentang apa yang sedang kita hadapi
Kami memiliki layanan utama dengan rute yang membaca dari antrian activemq (boot musim semi dengan broker tertanam) mengirimkannya ke Route(B) dan kemudian mengirimkan semuanya ke Route(C) terakhir. Rute(B) bergantung pada layanan.
Versi Unta: 3.3.0 Versi boot musim semi: 2.3.3.RELEASE
Rute A:
onException(Exception::class.java)
.handled(true)
.bean("foo.ErrorProcessor", "processError")
from("activemq:queue:myqueue")
.routeId("myroute")
.to("direct:my_external_route")
.to(ExchangePattern.InOnly,"direct:myroute_result")
Rute B:
onException(Exception::class.java)
.handled(true)
.bean("foo.ErrorProcessor", "processError")
from("direct:my_external_route")
.routeId("my_external_route")
.process {something()} //This processor can throw exceptions that are treated in our processor
Rute C:
from("direct:myroute_result")
.process(someProcess())
.to(ExchangePattern.InOnly,"activemq:queue:results_queue")
Konfigurasi activemq Spring Boot
spring:
jmx:
enabled: true
activemq:
broker-url: vm://localhost?broker.persistent=false,useShutdownHook=false
in-memory: true
non-blocking-redelivery: true
packages:
trust-all: false
trusted: com.mypackage
pool:
block-if-full: true
block-if-full-timeout: -1
enabled: false
idle-timeout: 30000
max-connections: 10
time-between-expiration-check: -1
use-anonymous-producers: true
Semuanya berjalan sangat baik dan lancar ketika prosesor B tidak mengeluarkan pengecualian. Ketika hal ini terjadi, meskipun mereka sedang dirawat dan objek normal dikembalikan ke isi pesan, yang kita miliki di log hanyalah
2021-04-10 15:33:32.354 DEBUG [#1 - JmsConsumer[consumerName]] o.a.c.p.Pipeline
: Message exchange has failed: so breaking out of pipeline for exchange: Exchange[ID-1234] Handled by the error handler. {}
Kami bahkan menambahkan penangan kesalahan default ke pabrik koneksi activemq kami tetapi tidak ada yang terjadi di sana juga. Kami memiliki konsumen DLQ yang sepertinya juga tidak mendapatkan apa-apa. Pemroses kesalahan pada ruteA juga tidak menangkap apa pun yang diharapkan sejak pengecualian ditangani sebelumnya.
Adakah yang pernah mengalami masalah ini atau serupa? Saya tahu bahwa beberapa masalah antara Camel dan komponen JMS mengenai penanganan kesalahan pernah dikemukakan di masa lalu, tetapi kami kesulitan memahami apa akar masalah ini.
Terima kasih sebelumnya, Pedro