from("seda:myqueue?size=2&blockWhenFull=true").process(sleep());
private Processor sleep() {
return new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
System.out.println(curTime() + " Going for sleep sleepid=" + body );
Thread.sleep(5000l);
System.out.println(curTime() + " Done sleep sleepid=" + body );
}
};
for (Integer i = 0; i <5; i++) {
Exchange exchange = new DefaultExchange(context);
exchange.setPattern(ExchangePattern.InOnly);
exchange.getIn().setHeader("header", i);
exchange.getIn().setBody(i.toString());
System.out.println("sending msg to seda");
Exchange send = template.send("seda:myqueue",exchange);
System.out.println("done:"+i);
}
Run Code Online (Sandbox Code Playgroud)
“ BlockWhenFull”未确认,即如果大小设置为 2 并且我在循环中发送 3 条消息,正文为“1”、“2”和“3”,那么我只收到“1”和“2”的睡眠消息,我猜即使我将“ BlockWhenFull”设置为 true,第三条消息也会默默地被丢弃。
我究竟做错了什么?
版本:2.15.3
blockWhenFull您需要在生产者上设置,例如您发送的位置
template.send("seda:myqueue?blockWhenFull=true",exchange);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |