所谓异步,指客户端的请求不会阻塞进程,服务端的响应可以是非即时的。像发邮件,发了就行,不需要对方马上响应,这种东东不论在前端还是后端,用的都很多。
异步的常见形态:
(1)通知;单向的
(2)请求/异步响应。
(3)消息
(1)、(2)被认为是比较常见的一对一请求,(3)可以实现一对多
MQ应用场景
(1)异步处理;短信、积分发送
(2)流量削峰;秒杀之类
(3)日志处理;kafka,大数据处理
(4)应用解耦。
MQ的基本使用:
//1,这种方式先要手动创建队列
// @RabbitListener(queues = "myQueue")
// 2,自动创建,
// @RabbitListener(queuesToDeclare = @Queue("myQueue"))
// 3,自动创建,Exchange和Queue绑定
@RabbitListener(bindings = @QueueBinding(
value = @Queue("myQueue"),
exchange = @Exchange("myExchange")
))
public void process(String message) {
log.info("MyReceiver: {}" , message);
}
调用:
@Test
public void send() {
amqpTemplate.convertAndSend("myQueue", "now " + new Date());
}
如果要绑定制定消息:
// 数码供应商服务,接受消息
@RabbitListener(bindings = @QueueBinding(
exchange = @Exchange("myOrder"),
key = "computer",
value = @Queue("computerOrder")
))
public void processComputer(String message) {
log.info("computer MyReceiver: {}" , message);
}
调用:
@Test
public void sendOrder() {
amqpTemplate.convertAndSend("myOrder","computer", "now " + new Date());
}