Spring-集成:QueueChannel
Spring-Integration: QueueChannel
简短摘要:
我想将消息发送到队列并让多个线程处理这些消息。应用程序应该只将消息异步发送到网关,但当队列已满时应该被阻塞。我还想多线程地传送到队列。我的问题是我的队列永远不会阻塞并接收比实际大小更多的消息
我不确定 "doesn't block" 是什么意思。这对我来说很好...
@SpringBootApplication
public class So46973604Application {
private final Logger LOGGER = LoggerFactory.getLogger(So46973604Application.class);
public static void main(String[] args) {
SpringApplication.run(So46973604Application.class, args).close();
}
@Bean
ApplicationRunner runner(Gate gate) {
return args -> {
for (int i = 0; i < 20; i++) {
gate.send("foo");
LOGGER.info("Sent " + i);
}
};
}
@Bean
QueueChannel channel() {
return new QueueChannel(10);
}
@ServiceActivator(inputChannel = "channel", poller = @Poller(fixedDelay = "0"))
public void handle(String in) throws InterruptedException {
Thread.sleep(1_000);
}
@MessagingGateway(defaultRequestChannel = "channel")
public interface Gate {
void send(String out);
}
}
前 10 个立即发送,然后由于阻塞等待队列每秒发送一个 space。
为什么你觉得你需要一个异步网关,如果你想阻止调用者?
简短摘要:
我想将消息发送到队列并让多个线程处理这些消息。应用程序应该只将消息异步发送到网关,但当队列已满时应该被阻塞。我还想多线程地传送到队列。我的问题是我的队列永远不会阻塞并接收比实际大小更多的消息
我不确定 "doesn't block" 是什么意思。这对我来说很好...
@SpringBootApplication
public class So46973604Application {
private final Logger LOGGER = LoggerFactory.getLogger(So46973604Application.class);
public static void main(String[] args) {
SpringApplication.run(So46973604Application.class, args).close();
}
@Bean
ApplicationRunner runner(Gate gate) {
return args -> {
for (int i = 0; i < 20; i++) {
gate.send("foo");
LOGGER.info("Sent " + i);
}
};
}
@Bean
QueueChannel channel() {
return new QueueChannel(10);
}
@ServiceActivator(inputChannel = "channel", poller = @Poller(fixedDelay = "0"))
public void handle(String in) throws InterruptedException {
Thread.sleep(1_000);
}
@MessagingGateway(defaultRequestChannel = "channel")
public interface Gate {
void send(String out);
}
}
前 10 个立即发送,然后由于阻塞等待队列每秒发送一个 space。
为什么你觉得你需要一个异步网关,如果你想阻止调用者?