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);
}"BlockWhenFull“未被确认,也就是说,如果size设置为2,并且我在循环中发送3 msg,而body为"1”、"2“和"3”,则只有"1“和"2”才能得到睡眠msg,而且我认为即使将"BlockWhenFull“设置为真,第三条消息也会被静默删除。
我做错什么了?
版本: 2.15.3
发布于 2016-01-23 08:45:52
你需要在制片人上设置blockWhenFull (如你发送的地方)
template.send("seda:myqueue?blockWhenFull=true",exchange);https://stackoverflow.com/questions/34949651
复制相似问题