• 消息队列笔记


    应用级应用程序,Java相关技术都是围绕着应用级应用程序。当下Java核心即是多线程+高并发+消息队列+异步! 技术是随着需求而产生的。2019.11.27

    多线程/并发编程 2019.11.27

    同步:即串行执行,同步锁:线程串行执行;常规表单提交:串行,用Ajax后:异步。

    rpc:远程过程调用,用于进程间通信。

    同步消息:消息/通知串行执行,

    异步消息:消息/通知并行执行,效率高,消息队列的作用体现,

    消息队列(远程队列)队列中为消息:

    消息队列是一种中间件。

    其实,消息队列还是使用了统一管理的理念。入队/出队必须同时执行,从而保持一致性。

    入队/生产者/产品/发送消息/发布者

    出队/消费者/接收(获取)消息/订阅者

    有多个消费者,一条消息被多次消费,

    订阅者持久化订阅,

    生产者、消费者之间不依赖,

    队列中的消息只有在被消费或者超时才会被销毁

    2019.11.28

    异步+消息队列=网速更快的假象;

    异步:客户端不需要等待,

    消息队列使用场景:

    1.客户端不需要服务器的反馈,诸如此类的非核心流程使用消息队列以异步化处理是好的选择,

    2.秒杀场景,用户一旦请求,请求消息写入消息队列,服务器读取消息队列以处理。首先入队的当然秒杀成功!这是队列先进先出的特性啊。秒杀功能还需要分布式锁技术。

    消息模型

    点对点消息模型:

    qq或微信私聊就是点对点消息模型,每一条消息都仅有一个发送者,一个接收者,消息队列入队(发消息)出队(接收消息)机制保证了私聊安全性。

    发布/订阅消息模型:

    发布者发布消息,多个订阅者均可获取消息副本,

    JMS(Java消息服务)

    类似spring动态代理,同样有消息代理,

    有jms模板(jmstemplate),它可以方便的发送/接收,入队/出队。

    Spring还提供了消息驱动POJO的理念:这是一个简单的Java对象,它能够以异步的方式响应队列或主题上到达的消息。

    Spring中如何集成实现JMS:

    step1:搭建消息代理,消息代理用作客户端/服务端通信的中介,

    ActiveMQ是一个伟大的开源消息代理产品,也是使用JMS进行异步消息传递的最佳选择,(消息代理产品还有Kafka等,中间件是自己写的,而Kafka是服务)。ActiveMQ是一个类似tomcat/maven的文件夹,对于大型分布式应用程序,这些maven、消息队列、数据库等当然都不是在同一台电脑上。在消息队列文件夹中可以找到启动该消息队列的脚本,启动即可;之后添加jar依赖;

    step2:建立连接工厂,消息目的地,

    连接工厂即消息队列软件,类似连接数据库的url、用户名、密码等,

    消息目的地又分为 队列 和 主题 两种:队列是入队出队;主题是发布/订阅;

    step3:使用jmstemplate,

    为了消除冗余和重复的JMS代码,Spring 给出的解决方案就是JmsTemplate。JmsTemplate可以创建连接、获得会话以及发送和接收消息。这使得我们可以专注于构建要发送的消息或者处理接收到的消息。另外,JmsTemplate可以处理所有抛出的笨拙的JMSException异常。

    发送消息:Java代码;接收消息:Java代码;

    step4:创建消息监听器,

    接收方法如receive()和receiveAndConvert()都是同步的,这些方法会一直被阻塞(阻塞就是不执行了),直到有消息发过来(这一点有点类似socket的发送和接收,发送消息时,接收消息的方法才会被调用执行),

    如果一发送消息就能被对应的方法处理,那就好了——消息监听器,它在消息监听器容器中。

    参考:

    JMS:

    https://blog.csdn.net/weixin_37352094/article/details/80500202

    https://www.cnblogs.com/jmcui/p/8906803.html

    什么是消息队列?https://blog.csdn.net/Java_3y/article/details/89235190

    Kafka使用场景:https://blog.csdn.net/lp284558195/article/details/80271853

  • 相关阅读:
    easyui datagrid 显示 footer
    ie浏览器 vuejs axios Promise 未定义
    react引入富文本编辑器TinyMCE
    react中ant-design组件实现textarea获取光标位置并插入表情图片
    前端日志埋点优化
    iframe父子页面通讯
    HTML5中的audio在react中的使用----语音播放进度条、倍速播放、下载等
    echarts简单入门
    在textarea里实现获取光标位置和选中内容
    lodash数组发现之旅--------The second day
  • 原文地址:https://www.cnblogs.com/yyjh/p/11947275.html
Copyright © 2020-2023  润新知