高性能RockerMQ(一)

简介: 高性能RockerMQ(一)

思考方式:以辩证的思维去发现探讨新事务

一、JMS消息服务介绍和使用场景

1、讲解什么是JMS,消息队列的使用

①、什么是JMS,java消息队列(java Message  Service),java平台中关于面向西澳西中间件的接口。

②、JMS是一种与厂商无关的API,用来访问消息收发系统消息,它类似于JDBC(java Database  Connectivity).这里,JDBC是可以用来访问许多不同关系数据库的API.

③、使用常见:

   核心应用:

           解耦:订单系统 -->物流系统

           异步:用户注册--》发送邮件,初始化信息

        比如:

        上面的步骤需要花600ms,串行的操作,用户需要等600ms才可以返回

         1、用户注册保留信息到数据库db中需要100ms

         2、写一个事件开一个异步的线程发送了短信,写道消息队列,也就几十毫秒而已

         3、短信服务会监听消息中间件里的事件,然后消费。这样就可以进行解耦的操作,短            信服务可以慢慢的消费,而不用管用户推送的消息有多么的多,因为都是放到中间件里            面去了。

          150ms:并行,解耦,用户就可以完成注册的操作。

           削峰:秒杀,日志处理(spark,storm,elk,kafka,hadoop)

   跨平台,多语言

   分布式事务,最终一致性:RocketMQ

    RPC调用上下游服务,数据源变动->通知下属

二、消息中间件常见概念和编程模型

不同的消息队列有不同的概念,可能不同的中间件有交集,也有的中间件也有特有的。

常见概念:

     ①、JMS提供者:连接面向消息中间件的,JMS接口的一个实现,RocketMQ,ActiveMQ,kafka等

           ②、  JMS生产者(Message Producer):生产消息的服务,比如用户注册的时候会产生一个消息,写到消息中间件里面去,所以它就是一个生产者。

            ③、  JMS消费者(Message  Consumer):消费消息的服务,类似于短信服务。有对应的事件,有消息过来,就会进行相应的消费。

             ④、   JMS消息:数据对象,比如msgid,content,phone,create_time,code

还有元数据里面的信息

             ⑤、   JMS队列:存储消费消息的区域,链表,list,arraylist,linkedlist,消息都是先进先出,消息中间件里面有很多队列,队列里面有很多的消息。

             ⑥、    JMS主题:一种支持发送消息给多个订阅者的机制。              

user_register_topic:对列的名称

       ⑦、JMS消息通常有两种类型:点对点(Point-to-Point),发布/订阅(Publish/Subscribe)

基础编程模型:消息中间件的基础模型

               ①、MQ中需要用的一些类

                     ConnectionFactory:连接工厂,JMS用它创建连接

                     Connection:JMS客户都安到JMS Provider的连接

                     Session:一个发送或接收消息的线程

                     Destination:消息的目的地:消息发送给谁

                     MessageConsumer/MessageProducer:消息消费者,消息生产者

三、对比当下主流的消息队列和选择问题

1、Apache  ActiveMQ,kafka,RabbitMQ,RocketMQ等等

    ①、ActiveMQ:http://activemq.apache.org/

           Apache出品,历史悠久,支持多种语言的客户端和协议,支持多种语言java,.NET,C++等,基于JMS Provider的实现,和java Provider Web实现的是一模一样的的

                  缺点:吞吐量不高(据说是万级的),多队列的时候性能下降,存在消息丢失的情况,比较少大规模使用。

   ②、 Kafka:http://kafka.apache.org/:主要在大数据领域用的很广。

                  是由Apache软件基金会开发的一个开源流处理平台,由Scala和java编写,kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理大规模的网站中的所有动作流数据(网页浏览,搜索和其他用户的行动),副本集机制,实现数据冗余,保障数据尽量不丢失;支持多个生产者和消费者。

缺点:不支持批量和广播消息,运维难度大,文档比较少。

    ③、   RabbitMQ:http://www.rabbitmq.com/

               是一个开源的AMQP实现,服务端用Erlang语言编写,支持多种客户端,如:python,ruby,.net,java,JMS,C,用于在分布式系统中存储转发消息,在易用性,扩展性 ,

高可用性等方面表现不错。在互联网的电商和金融界用的比较多。

缺点:使用Erlang开发,阅读和修改源码难度大。为了时间和人力的成本。

    ④、  RocketMQ:http://rocketmq.apache.org/

                   阿里开源的一款的消息中间件,纯java开发,具有高吞吐量 ,高可用性,适合大规模分布式系统应用的特点,性能强劲(零拷贝技术),支持海量堆积,支持指定次数和时间间隔的失败消息重发,支持consumer端tag过滤,延迟消息等,在阿里内部进行大规模使用,适合在电商,互联网金融等领域使用。

相关文章
|
8月前
|
人工智能 自然语言处理 API
8.6K star!完全免费+本地运行+无需GPU,这款AI搜索聚合神器绝了!
FreeAskInternet是一款革命性的开源项目,它完美结合了多引擎搜索和智能语言模型,让你在不联网、不花钱、不暴露隐私的情况下,获得媲美ChatGPT的智能问答体验。这个项目最近在GitHub上狂揽8600+星,被开发者称为"本地版Perplexity"。
376 2
|
5月前
|
安全 数据安全/隐私保护
SAP集成HTTP接口(x-www-form-urlencoded格式)
实现这一过程时,务必遵循最佳实践,包括确保代码的稳定性、考虑到异常处理和系统资源的优化使用。这样做不仅能确保数据的安全和有效性,还能提高系统集成的效率和可靠性。
408 4
|
机器学习/深度学习 传感器 人工智能
【博士每天一篇论文-综述】Brain Inspired Computing : A Systematic Survey and Future Trends
本文提供了对脑启发计算(BIC)领域的系统性综述,深入探讨了BIC的理论模型、硬件架构、软件工具、基准数据集,并分析了该领域在人工智能中的重要性、最新进展、主要挑战和未来发展趋势。
489 2
【博士每天一篇论文-综述】Brain Inspired Computing : A Systematic Survey and Future Trends
|
10月前
|
存储 人工智能 JSON
用 SAP ABAP 接入国内 AI 产品通用接口技术指南 1、调用AI接口
SAP 系统与国内先进的 AI 产品(如百度文心一言、阿里通义千问、字节跳动云雀模型、华为盘古大模型、豆包、Deepsheek 等)集成通用接口技术指南
1299 23
|
关系型数据库 MySQL Java
收藏了许久的(快捷键指定):win系统的dos命令
本文收集了一系列Windows系统中的DOS命令快捷键和实用技巧,包括打开系统属性、运行窗口、文件管理、锁定桌面、查看系统信息、配置系统启动模式、系统服务管理、注册表编辑、共享路径访问、环境变量设置、端口查看、文件操作等,旨在提高用户在使用Windows系统时的效率和便利性。
434 0
|
自然语言处理 前端开发 Serverless
基于阿里云通义千问开发编程辅助与代码生成工具
随着软件开发需求的增加,编程辅助与代码生成工具成为开发者提高效率的利器。这类工具能够根据用户描述生成代码片段、协助调试、生成自动化脚本等,大大减少重复性劳动。阿里云通义千问作为一款先进的大语言模型,具备强大的自然语言处理和代码生成能力,非常适合用于开发这样的工具。
1707 3
|
人工智能 自然语言处理 前端开发
人工智能如何影响前端开发
【6月更文挑战第1天】人工智能如何影响前端开发
428 3
|
消息中间件 存储 Java
分享一下rocketmq入门小知识
分享一下rocketmq入门小知识
338 0
分享一下rocketmq入门小知识
|
存储 关系型数据库 MySQL
怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
689 0
|
测试技术
详解单元测试问题之@InjectMocks注入mock对象如何解决
详解单元测试问题之@InjectMocks注入mock对象如何解决
1129 1