引入
5fNinNwJugdqzuM9B6-d
在springCould的盛行下,微服务架构在行业中越来越常见,它将业务分成很多模块,再一定程度上缓解了系统的耦合性,为什么说在一定程度上缓解了系统的耦合性?想想,拿一个消息推送系统来举例,消息生产方和消息接收作为两个服务来运行,正常情况下,两个服务没有任何问题,当消息生产方生产了一条消息,消息接收方可以及时的消费。但是,如果消费者挂掉了呢?,那么生产者生产的消息就是一个费消息,消费这永远也不会接收到。
对于上面提到的这种情况,消费者在一定程度上还是依赖生产者的,有方法解决吗?答案是肯定的!JavaEE规范提供了一种JMS规范,通过JMS这套规范,来引入一种中间件,将两个不是直连的模块通过一个共同的消息收发服务组件关联起来达到解耦和削峰填谷的效果。当然,生产这样的中间件并不是毫无规则的,JMS规定了一组接口,像创建、发送、读取消息等,用于支撑Java应用程序的开发。
拓展
在此之前,先说一下JavaEE
JavaEE是一套在使用Java进行企业级应用开发是被要求遵循的13个核心规范标准,剩余的还有
1.JDBC
2.JNDI
3.EJB
4.RMI 远程调用
.....
JMS
ActiveMq
回归正题,说一下amq
amq是JMS其中的一个落地产品
Message
消息头
TextMessage textMessage = session.createTextMessage()
textMessage.setJMSDeliveryMode(); //消息是否持久化
DeliveryMode.PERSISTENT 持久 DeliveryMode.NON_PERSISTENT 非持久
textMessage.setJMSDestination(); //目的地
textMessage.setJMSExpiration(); //消息过期时间
textMessage.setJMSPriority(); //优先级 1-9个级别
textMessage.setJMSMessageID(); //消息唯一识别标识
消息体
extMessage textMessage = session.createTextMessage() //text类型的属性
MapMessage mapMessage = session.createMapMessage(); //map类型消息
- api发送和接收
- 高可用
- 持久化
- 延时发送+定时投递
- 签收机制
- 集群和容错
- Spring 整合
- 可以解决什么问题
利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性收缩。冗余存储,流量削峰,异步通信,数据同步等功能。
发送者把消息发送给消息服务器。消息服务器将消息存放在若干队列/主题中,在合适的时候,消息服务器会将消息发给接受者。在这个过程中,发送和接受是异步的,也就是发送无需等待。而且发送者和接受者的生命周期也没有必然关系。
尤其是在pub/订阅sub模式下,也可以完成一对多的通信,即让一个消息有多个接受者。
activemq 命令
启动
bin目录下 ./activemq start
关闭
bin目录下 ./activemq stop
查询进程
ps -ef | grep active //按名称查
netstat -anp | grep 61616 //按端口查询
ltcp6 0 0 :::61616 :::* LISTEN 14192/java
lsof -i:61616 //另外一种用端口查询
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 14192 root 130u IPv6 19957339 0t0 TCP *:61616 (LISTEN)