代码改变世界

JMS Java message service (Java消息服务)

2019-07-31 21:01  利亚东  阅读(407)  评论(0编辑  收藏  举报

    jms的全称叫做Java message service (Java消息服务) jms是jdk底层定义的规范, 各大厂商都是实现这个

    规范的技术

作用:

    在soa分布式架构系统中, 或者企业中的多个项目中, 进行多个系统异步传递消息.

    优点:

        1.使用消息服务器当做大的队列使用, 先进先出, 来处理高并发写入操作

        2. 使用消息服务器可以将业务系统的串行执行改为并行执行, 处理效率高, 更合理的榨取服务器的性能.

    缺点:

        消息中间件实时性不高, 因为发送方将消息发送给消息服务器后, 消息服务器未必能够立即处理, 主要看

        消息服务器是否繁忙, 队列中先进先出, 如果数据量大, 要排队等待执行

同步技术:

    dubbo是一中同步技术, 实时性高, controller调用service项目, 调用就执行, 如果service项目中的代码没有

    执行完, controller里面的代码一致等待结果.

   

异步技术:

    mq消息中间件技术(jms) 是一种异步技术, 消息发送方, 将消息发送给消息服务器, 消息服务器未必立即处理.

    什么时候去处理, 主要看消息服务器是否繁忙, 消息进入服务器后会进入队列中, 先进先出.实时性不高.

 

使用场景:

    1. 使用消息服务器当做大的队列使用, 先进先出, 来处理高并发写入操作

    2. 使用消息服务器可以将业务系统的串行执行改为并行执行, 处理效率高, 更合理的榨取服务器的性能.

   

 

 

jms消息服务器同类型技术:

ActiveMQ:

    是apache的一个比较老牌的消息中间件, 它比较均衡, 既不是最安全的, 也不是最快的.

RabbitMQ:

    是阿里巴巴的一个消息中间件, 更适合金融类业务, 它对数据的安全性比较高.能够保证数据不丢失.

ZeroMQ:

    史上最快的消息队列系统

Kafka:

    Apache下的一个子项目。特点:高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;

    完全的分布式系统。适合处理海量数据。

 

JMS中支持的消息类型:

    TextMessage--一个字符串对象

    MapMessage--一套名称-值对

    ObjectMessage--一个序列化的 Java 对象

    BytesMessage--一个字节的数据流

    StreamMessage -- Java 原始值的数据流

 

JMS中的两种发送模式(重点):

    点对点模式: 一个发送方, 一个接收方. 也可以多个发送方, 一个接收方, 主要是接收方必须是第一个.

    订阅发布模式: 一个发送方, 多个接收方.   发送方也可以是多个, 主要看接收方, 接收方必须是多个

 

 

 

如果保证消息服务器不丢消息, 也就是不丢数据:

    答: 我们使用的是activemq消息服务器, 它有两种发送模式点对点和订阅发布

    点对点:

        不用管, 消息服务器有内部机制保证绝对不会丢数据.

        原理: 发送方将消息发送给消息服务器后, 消息服务器会将队列中的消息发送给接收方, 接收方接收到

        消息后会给消息服务器返回一个响应, 消息服务器接收到响应后认为消息接收成功, 将队列中这个发送完的

        消息删除, 如果消息服务器在一定时间内没有接受到响应, 则认为消息接收方宕机, 这个时候会将发送完的这个

        消息进行持久化保存, 如果消息接收方服务器从新启动连接消息服务器, 消息服务器会监听到, 会将之前持久化的

        消息从新发送给消息服务器.

    订阅发布:

        订阅发布模式没有实现保证数据安全的机制, 如果消息服务器将消息发送给接收方, 接收方接收到就算接收到了

        没接收到就算丢了, 也不进行持久化.

 

 

 

 点对点模拟