先回忆一下mq的模型
消息队列永远滴神!
(i) producer生产者把任务丢到 mq
(ii) exchange对任务进行分发
(iii)consumer消费者从队列中领任务
exchange是可以根据不同的模式(mq中)
分发不同的任务到不同队列
包括群发,根据名字发,根据名字*(模糊匹配)发
中间件的核心思路也体现在发收解耦上面
Exchanger 我觉得用这个思路来理解肯定会舒服很多(可能只是我觉得)
爱称:匿名聊天盲盒
说明:又一大神器,可以把毫无联系的两个东西,在java的世界里让他们沟通起来
基本上有这个,就能java代码手撸一个mq出来玩了
简介:简单好用,易上手,就是没啥地方能用到,发布订阅用成熟的中间件redis,mq不香吗!!!
而且又是容易堵塞线程的一大利器(贬义)
Exchanger<String> stringExchanger = new Exchanger<>();
threadPool.execute(() -> {
try {
//1.发送一条消息到神秘空间
//2.我苦苦的堵塞 等到有结果的那一天
//3.1 到时间了 我收回消息 溜了
//3.2 一位神秘人拿走了那条消息 并拿到了他给我的消息
String message = stringExchanger.exchange("message", 100L, TimeUnit.SECONDS);
} catch (Exception e) {
//exception
} finally {
//do sth
}
});
//神秘人
new Thread(() -> {
try {
// 拿走了你的消息 并对你吐了口水
String message = stringExchanger.exchange("口水", 100L, TimeUnit.SECONDS);
} catch (Exception e) {
//exception
} finally {
//do sth
}
}
);
感谢:《java并发变成详解:深入理解并发核心库》汪文军
网友评论