我的代码如下:
static ProducerTemplate producer = null;
...
public void process(Exchange exchange) {
if (producer == null) {
producer = exchange.getContext().createProducerTemplate();
}
for (Message msg : messages){
Map<String, Object> headers = Maps.newHashMap();
headers.put("DisplayMessages", true);
producer.sendBodyAndHeaders("seda:aggregate-messages?blockWhenFull=true&size=500", msg, headers);
}
}
我在第RejectedExecutionException null
行投了producer.sendBody...
。
据我所知,这通常是由尝试沿非异步路由发送多个异步交换引起的。但是,SEDA不是异步的吗?
答案 0 :(得分:0)
您需要将处理器编码为线程安全的。上面的代码是不线程安全。
您应该根据生命周期在doStart
和doStop
方法中初始化和清理逻辑
在那里,您可以设置一次生产者模板,然后您的处理器可以变为线程安全。