石家庄企业网站制作,中国建设银行密码重置网站,营口房地产网站开发,国际新闻最新消息今天简短文章目录 1、消息2、JMS3、AMQP4、案例#xff1a;模拟订单短信通知 相关文章#xff1a;
【同步通讯与异步通讯】 1、消息
消息的发送方#xff0c;即生产者。消息的接收方#xff0c;即消费者。同步通信就行打视频#xff0c;等着对方接电话才能继续往下#xff0c;而… 文章目录 1、消息2、JMS3、AMQP4、案例模拟订单短信通知 相关文章
【同步通讯与异步通讯】 1、消息
消息的发送方即生产者。消息的接收方即消费者。同步通信就行打视频等着对方接电话才能继续往下而异步通信就像发消息发完我就干其他事儿了啥时候回随你。 这种异步的模式对应在生产中就是 2、JMS JMSJava Message Service它是一个规范等同于JDBC规范提供了与消息服务相关的API接口 JMS的消息模型有
peer-2-peer点对点模型消息发送到一个队列中队列保存消息。队列的消息只能被一个消费者消费或超时publish-subscribe发布订阅模型消息可以被多个消费者消费生产者和消费者完全独立不需要感知对方的存在
JMS的消息种类有
TextMessageMapMessageBytesMessageStreamMessageObjectMessageMessage 只有消息头和属性
JMS的实现技术有类比实现JDBC的各个数据库驱动ActiveMQ、Redis、HornetMQ、RabbitMQ、RocketMQ没有完全遵守JMS规范
3、AMQP AMQPadvanced message queuing protocol一种协议高级消息队列协议也是消息代理规范规范了网络交换的数据格式兼容JMS。优点是具有跨平台性服务器供应商生产者、消费者可以使用不同的语言来实现 AMQP消息模型有
direct exchangefanout exchangetopic exchangeheaders exchangesystem exchange
AMQP消息种类有
byte[]byte跨平台字节哪儿都能通
AMQP的实现技术有RabbitMQ、StormMQ、RocketMQ
4、案例模拟订单短信通知
正常的一个购物订单业务包含流程很多比如
登录状态检测生成主单生成子单库存检测与变更积分变更支付短信通知购物车维护运单信息初始化商品库存维护会员维护…
这里模拟下单后给用户异步发送通知短信先不用MQ用一个集合模拟MQ来实现这个业务首先写消息处理的Service层模拟消费队列中的信息发送短信给用户
public interface MessageService {/*** 模拟往队列里放消息* param id*/void sendMessage(String id);/*** 模拟取消息消费*/String doMessage();
}
Service
Slf4j
public class MessageServiceImpl implements MessageService {private ListString msgQueue new ArrayList(); //用它模拟队列Overridepublic void sendMessage(String id) {msgQueue.add(id);log.info(待发送短信的订单已纳入处理队列id id);}Overridepublic String doMessage() {String id msgQueue.remove(0);log.info(已完成发送短信业务订单id id);return id;}
}写订单业务的Service层模拟下单后把订单编号等信息放到队列中
public interface OrderService {void order(String id);
}Service
Slf4j
public class OrderServiceImpl implements OrderService {Resourceprivate MessageService messageService;Overridepublic void order(String id) {//一系列操作调用其他服务处理业务//...log.info(订单处理开始...);//短信消息处理messageService.sendMessage(id);log.info(订单处理结束...);System.out.println(); //换行一下}
}
完善下Controller层
RestController
RequestMapping(/order)
public class OrderController {Resourceprivate OrderService orderService;PostMapping({id})public void order(PathVariable String id){orderService.order(id);}
}
RestController
RequestMapping(/msg)
public class MessageController {Resourceprivate MessageService messageService;PostMappingpublic String doMsg(){return messageService.doMessage();}
}看下效果调用订单接口处理业务并且订单编号被扔进队列 消费完成短信发送
再往下是整合各种MQ技术实现消息的发送与接收分别为
ActiveMQRabbitMQRocketMQKafka
对上面的代码换一个实现类重写sendMessage和doMessage这两个消息发送与处理的方法就相当于换了一种MQ的实现技术。