当前位置: 首页 > news >正文

一、ActiveMQ介绍

ActiveMQ介绍

  • 一、JMS
    • 1.jms介绍
    • 2.jms消息传递模式
    • 3.JMS编码总体架构
  • 二、消息中间件
  • 三、ActiveMQ介绍
    • 1.引入的原因
      • 1.1 原因
      • 1.2 遇到的问题
      • 1.3 解决思路
    • 2.定义
    • 3.特点
      • 3.1 异步处理
      • 3.2 应用系统之间解耦
      • 3.3 实际-整体架构
    • 4.作用

一、JMS

1.jms介绍

  • jms是java消息服务接口规范,主要包含四大元素:生产者、消费者、消息、消息服务。
    • 生产者:创建消息,并把消息发动到消息服务;
    • 消费者:从消息服务接收消息;
    • 消息服务:即MQ消息服务(broker),而生产者与消费者相对其均为客服端;
    • 消息:整个消息服务的传输对象,消息包含消息头、消息属性、消息体;

常用消息头属性:JMSDestination(消息目的地,如果生产者指定了目的地,在发送时会改为生产者绑定的目的地)、JMSDeliveryMode(是持久还是非持久)、JMSExpiration(过期时间,默认永久)、JMSPriority(优先级,0-9,数值越大优先级越高,默认为4)、JMSMessageId(唯一的消息ID);
消息属性:可视为消息头属性的扩展,通过setXxxProperty(k,v)设置;
消息体:封装消息的具体数据,发送与接收的消息体类型必须一致,消息体类型总共有5种,TextMessage、Mapmessage、BytesMessage、StreamMessage、ObjectMessage;

2.jms消息传递模式

  • jms消息传递模式有如下两种,
    • 点对点消息传递模式(P2P):消息发送到一个特殊队列(queue), 消费者从队列获取消息,一条消息只能被只能被一个消费者消费;
    • 发布/订阅消息传递模式(publish-subscribe):消息被发送到一个主题上(topic),所有订阅了该主题的消费者,都能接收到消息。

3.JMS编码总体架构

  • JMS应用程序由如下基本模块组成
    • 1.连接工厂对象,创建消息客户端(生产者、消费者)与消息服务端的连接(connection);
    • 2.连接对象,创建回话对象(session);
    • 3.会话对象,创建生产者对象(producer)、消费者对象(consumer)以及消息对象(message);
    • 4.目的地(queue/topic),点对点模式下目的地是队列(queue),发布/订阅模式下目的地是主题(topic),生产者把消息发送到目的地,消费者从目的地接收消息
      在这里插入图片描述

Destination-目的地

  • 总共有两大模式
    • 队列(Queue):队列是一种一对一的消息传递模式。在队列中,消息发送方(生产者)将消息发送到队列中,然后消息接收方(消费者)从队列中接收并处理消息。每条消息只会被一个消费者接收和处理,确保了消息的顺序性和唯一性。
    • 主题(Topic):主题是一种一对多的消息传递模式。在主题中,消息发送方(生产者)将消息发送到主题中,然后所有订阅该主题的消息接收方(消费者)都会收到该消息。每个消费者都可以独立地接收和处理消息,消息的传递是广播式的,可以实现发布-订阅模式。(类似公众号,N个人订阅,就有N个人收到消息)。

二、消息中间件

  • 消息中间件是实现了jms规范的落地产品,目前市场上主流的消息中间件有 ActiveMQ、Kafka、RocketMQ、RabbitMQ等。企业开发中使用消息中间件的主要目的是 解决耦合调用、抵御洪峰流量(削峰)等。 以下主要讲解ActiveMQ的使用。

三、ActiveMQ介绍

  • 官网地址

1.引入的原因

1.1 原因

  • 微服务架构后,链式调用是我们在写程序时候的一般流程,为了完成一个整体功能会将其拆分成多个函数(或子模块),比如模块A调用模块B,模块B调用模块C,模块C调用模块D。但在大型分布式应用中,系统间的RPC交互繁杂,一个功能背后要调用上百个接口并非不可能,从单机架构过渡到分布式微服务架构的通例

1.2 遇到的问题

  • 系统之间接口耦合严重
    • 举个例子:如果系统A要发送数据给系统B和系统C,发送给每个系统的数据可能有差异,因此系统A对要发送给每个系统的数据进行了组装,然后逐一发送;
    • 当代码上线后又新增了一个需求:把数据也发送给D,新上了一个D系统也要接受A系统的数据,此时就需要修改A系统,让他感知到D系统的存在,同时把数据处理好再给D。在这个过程你会看到,每接入一个下游系统,都要对系统A进行代码改造,开发联调的效率很低。
  • 面对大流量并发时,容易被冲垮
    • 每个接口模块的吞吐能力是有限的,这个上限能力如果是堤坝,当大流量(洪水)来临时,容易被冲垮。
    • 举个例子秒杀业务:上游系统发起下单购买操作,我就是下单一个操作下游系统完成秒杀业务逻辑(读取订单,库存检查,库存冻结,余额检查,余额冻结,订单生产,余额扣减,库存减少,生成流水,余额解冻,库存解冻)
  • 等待同步存在性能问题
    • RPC接口上基本都是同步调用,整体的服务性能遵循“木桶理论”,即整体系统的耗时取决于链路中最慢的那个接口。比如A调用B/C/D都是50ms,但此时B又调用了B1,花费2000ms,那么直接就拖累了整个服务性能。

1.3 解决思路

  • 解耦:要做到系统解耦,当新的模块接进来时,可以做到代码改动最小;
  • 削峰:设置流量缓冲池,可以让后端系统按照自身吞吐能力进行消费,不被冲垮;
  • 异步:强弱依赖梳理能将非关键调用链路的操作异步化并提升整体系统的吞吐能力;

2.定义

  • 面向消息的中间件(message-oriented middleware)MOM能够很好的解决以上问题,是指利用高效可靠的消息传递机制与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
  • 通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储、流量削峰,异步通信,数据同步等功能。
    • 发送者把消息发送给消息服务器,消息服务器将消息存放在若干队列/主题topic中,在合适的时候,消息服务器回将消息转发给接受者。在这个过程中,发送和接收是异步的,也就是发送无需等待,而且发送者和接受者的生命周期也没有必然的关系;
    • 尤其在发布pub/订阅sub模式下,也可以完成一对多的通信,即让一个消息有多个接受者。
  • ActiveMQ 是 Apache 推出的一款 开源免费的,完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现的消息中间件(Message Oriented Middleware,MOM)

3.特点

3.1 异步处理

  • 消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或者队列)上;
  • 消息接收者则订阅或者监听该爱通道。一条消息可能最终转发给一个或者多个消息接收者,这些消息接收者都无需对消息发送者做出同步回应。整个过程都是异步的。
    在这里插入图片描述
  • 这样的一种通信方式,就是所谓的“异步”通信方式,对于系统A来说,只需要把消息发送给MQ,然后系统B就会异步的去进行处理了,系统A不需要“同步”的等待系统B处理完成。
    • 这样的好处是 解耦

3.2 应用系统之间解耦

  • 发送者和接收者不必了解对方,只需要确认消息
  • 发送者和接收者不必同时在线

3.3 实际-整体架构

在这里插入图片描述

4.作用

  • 解耦
  • 削峰
  • 异步

相关文章:

一、ActiveMQ介绍

ActiveMQ介绍 一、JMS1.jms介绍2.jms消息传递模式3.JMS编码总体架构 二、消息中间件三、ActiveMQ介绍1.引入的原因1.1 原因1.2 遇到的问题1.3 解决思路 2.定义3.特点3.1 异步处理3.2 应用系统之间解耦3.3 实际-整体架构 4.作用 一、JMS 1.jms介绍 jms是java消息服务接口规范&…...

【牛客】寒假训练营1 I-It‘s bertrand paradox. Again! 题解

传送门&#xff1a;It’s bertrand paradox. Again! 标签&#xff1a;随机 题目大意 有两个人分别用两种方式在二维平面上随机生成1e5个圆&#xff0c;每个圆上的每一个点(x,y)都满足-100<x<100且-100<y<100&#xff0c;现在将某个人生成的1e5个圆的圆心和半径告…...

各种手型都合适,功能高度可定制,雷柏VT9PRO mini和VT9PRO游戏鼠标上手

去年雷柏推出了一系列支持4KHz回报率的鼠标&#xff0c;有着非常敏捷的反应速度&#xff0c;在游戏中操作体验十分出色。尤其是这系列4K鼠标不仅型号丰富&#xff0c;而且对玩家的操作习惯、手型适应也很好&#xff0c;像是VT9系列就主打轻巧&#xff0c;还有专门针对小手用户的…...

sql建库,建表基础操作

当涉及到SQL建库和建表操作时&#xff0c;以下是一个简单的示例&#xff1a; 1. 建库&#xff08;创建数据库&#xff09; sql复制代码 CREATE DATABASE mydatabase; 上述语句将创建一个名为mydatabase的数据库。 2. 选择数据库 在创建表之前&#xff0c;需要选择要在其中…...

算法训练营day32,贪心算法6

import "strconv" //738. 单调递增的数字 func monotoneIncreasingDigits(n int) int { str : strconv.Itoa(n) nums : []byte(str) length : len(nums) if length < 1 { return n } for i : length - 1; i > 0; i-- { //如果前一个数字比当前值大&#xff0…...

CTR之行为序列建模用户兴趣:DIN

在前面的文章中&#xff0c;已经介绍了很多关于推荐系统中CTR预估的相关技术&#xff0c;今天这篇文章也是延续这个主题。但不同的&#xff0c;重点是关于用户行为序列建模&#xff0c;阿里出品。 概要 论文&#xff1a;Deep Interest Network for Click-Through Rate Predict…...

Java使用Redis实现分页功能

分页功能实现应该是比较常见的&#xff0c;对于redis来说&#xff0c;近期刷题就发现了lrange、zrange这些指令&#xff0c;这个指令怎么使用呢&#xff1f; 我们接下来就来讲解下。 目录 指令简介lrangezrange Java实现Redis实现分页功能 指令简介 lrange lrange 是 Redis 中…...

Qt标准对话框设置

Qt标准对话框设置&#xff0c;设置字体、调色板、进度条等。 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this); }MainWindow::~MainWi…...

如何让Obsidian实现电脑端和安卓端同步

Obsidian是一款知名的笔记软件&#xff0c;支持Markdown语法&#xff0c;它允许用户在多个设备之间同步文件。要在安卓设备上实现同步&#xff0c;可以使用remote save插件&#xff0c;以下是具体操作步骤&#xff1a; 首先是安装电脑端的obsidian&#xff0c;然后依次下载obs…...

windows系统中jenkins构建报错提示“拒绝访问”

一.背景 之前徒弟在windows中安装的jenkins,运行的时候用的是java -jar jenkins.war来运行的。服务器只有1个盘符C盘。今天说构建错误了&#xff0c;问我修改了啥&#xff0c;我年前是修改过构建思路的。 二.问题分析 先看jenkins构建任务的日志&#xff0c;大概是xcopy命令执…...

服务器防火墙的应用技术有哪些?

随着互联网的发展&#xff0c;网络安全问题更加严峻。服务器防火墙技术作为一种基础的网络安全技术&#xff0c;对于保障我们的网络安全至关重要。本文将介绍服务器防火墙的概念和作用&#xff0c;以及主要的服务器防火墙技术&#xff0c;包括数据包过滤、状态检测、代理服务、…...

力扣:40. 组合总和 II

回溯&#xff1a; 1.先声明好大集合和小集合&#xff0c;在调用回溯函数&#xff0c;终止条件为sumtarget&#xff0c;要进行剪枝操作减少遍历的次数&#xff0c;去重操作防止数组中有两个相同的值来组成的集合相同。 class Solution {List<List<Integer>> li1ne…...

Java设计模式——责任链模式

当一个请求需要在多个对象之间传递&#xff0c;每个对象都可能处理该请求或将其传递给下一个对象。在这种情况下&#xff0c;需要避免将发送者与接收者之间的耦合&#xff0c;以及确定请求的处理方式。此时可使用责任链模式&#xff0c;它的优点有降低耦合度&#xff08;无需关…...

c++面试

c基础 面试题 1&#xff1a;变量的声明和定义有什么区别 1.定义:为变量分配地址和存储空间&#xff0c;声明:不分配地址。 2.一个变量可以在多个地方声明&#xff0c;但是只在一个地方定义。 3.加入 extern 修饰的是变量的声明&#xff0c;说明此变量将在文件以外或在文件后…...

[ansible] playbook运用

一、复习playbook剧本 --- - name: first play for install nginx #设置play的名称gather_facts: false #设置不收集facts信息hosts: webservers:dbservers #指定执行此play的远程主机组remote_user: root #指定执行此play的用…...

MSSQL运用

做过的事情&#xff0c;隔几年又再做相同的事情&#xff0c;做一下记录。 角色与权限 创建账号与设定执行存储过程权限 Use testDB CREATE LOGIN acct WITH PASSWORDp1 CREATE USER acct FOR LOGIN acct GO GRANT EXECUTE ON SP_Test TO acct; GO 存储过程 调用写好的SQL语…...

linux命令--pidof

文章目录 linux命令--pidof linux命令–pidof pidof 是Linux系统中用来查找正在运行进程的进程号&#xff08;pid)的工具&#xff0c;功能类似pgrep和ps。 pidof命令用于查找指定名称的进程的进程号id号。 语法 pidof(选项)(参数) 选项 -s&#xff1a;仅返回一个进程号&…...

计算机视觉发展的方向和潜在机会

计算机视觉发展的方向 文章目录 计算机视觉发展的方向计算机视觉发展的方向潜在机会 计算机视觉发展的方向 未来计算机视觉发展的方向可能包括以下几个方面&#xff1a; 深度学习和神经网络&#xff1a;深度学习已经成为计算机视觉领域的重要技术&#xff0c;未来将继续深入研…...

Java Web(六)--XML

介绍 官网&#xff1a;XML 教程 为什么需要&#xff1a; 需求 1 : 两个程序间进行数据通信&#xff1f;需求 2 : 给一台服务器&#xff0c;做一个配置文件&#xff0c;当服务器程序启动时&#xff0c;去读取它应当监听的端口号、还有连接数据库的用户名和密码。spring 中的…...

智慧城市的新宠儿:会“思考”的井盖

在城市化飞速发展的今天&#xff0c;我们或许未曾过多地关注那些平凡却至关重要的井盖。它们无声地矗立在城市的每个角落&#xff0c;守护着深藏于地下的城市生命线&#xff0c;然而&#xff0c;这些井盖并未满足于传统的角色&#xff0c;它们正逐步融入智慧城市的宏大画卷中&a…...

嵌入式工程师核心素养:从测试到系统构建的全链路能力模型

1. 从“明星评选”看嵌入式工程师的成长路径与价值塑造最近看到一篇关于某公司内部“品质与服务创建活动”的报道&#xff0c;评选了四位明星工程师。这让我感触颇深。在嵌入式这个行当里摸爬滚打了十几年&#xff0c;我见过太多技术扎实但默默无闻的同行&#xff0c;也见过一些…...

RK3588 Android系统签名实战:为APK获取系统权限完整指南

1. 项目概述与核心价值在嵌入式Android开发领域&#xff0c;尤其是基于瑞芯微&#xff08;Rockchip&#xff09;平台如RK3588进行产品研发时&#xff0c;我们常常会遇到一个核心需求&#xff1a;如何让一个普通的第三方APK应用&#xff0c;获得系统级&#xff08;System&#x…...

《科技代替了我工作》的传播入口:技术焦虑如何落到听众

从内容传播角度看&#xff0c;《科技代替了我工作》有天然的现实入口&#xff0c;但写法必须克制。它不是技术教程&#xff0c;也不是政策评论&#xff0c;而是把技术变化落到一个普通人的饭碗、身份感和安全感上。这个标题容易被记住&#xff0c;因为它把宏大的技术词变成了第…...

ModSecurity-nginx终极指南:如何为Nginx部署下一代WAF防护

ModSecurity-nginx终极指南&#xff1a;如何为Nginx部署下一代WAF防护 【免费下载链接】ModSecurity-nginx ModSecurity v3 Nginx Connector 项目地址: https://gitcode.com/gh_mirrors/mo/ModSecurity-nginx 在当今网络安全威胁日益复杂的环境中&#xff0c;为Web服务器…...

河南话TTS项目踩坑实录:为什么你的“中”字总发成“zōng”?——基于127小时方言语料的韵律建模纠偏指南

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;河南话TTS项目踩坑实录&#xff1a;为什么你的“中”字总发成“zōng”&#xff1f; 在构建河南方言语音合成&#xff08;TTS&#xff09;系统时&#xff0c;我们发现一个高频且顽固的问题&#xff1a;标准普通…...

【巴洛克AI生成合规白皮书】:基于梵蒂冈档案馆高清藏品训练的192个版权安全Prompt模板

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;巴洛克AI生成合规白皮书导论 巴洛克AI生成合规白皮书旨在为组织在部署和运营生成式人工智能系统时&#xff0c;提供一套可落地、可审计、可演进的合规治理框架。该白皮书聚焦于中国《生成式人工智能服务管理暂…...

向量库+RAG+大模型在医疗AI中为何常显不足?揭秘图谱如何重塑医疗知识系统信任度!

文章指出&#xff0c;在医疗AI领域&#xff0c;单纯依赖向量库RAG大模型的经典路线已显不足。医疗场景对知识系统的要求远超“语义相似度”&#xff0c;涉及适应症、禁忌症、证据等级等严格约束。知识图谱在医疗AI中的重要性日益凸显&#xff0c;它不仅能够构建知识间的关系网络…...

Servlet 容器与过滤器 超详细讲解

目录 一、Servlet 容器(Servlet Container) 1. 是什么? 2. 核心作用(必须掌握) 3. Servlet 生命周期(容器全权控制) 4. 工作流程(HTTP 请求完整链路) 5. 总结一句话 二、过滤器(Filter) 1. 是什么? 2. 核心特点 3. 过滤器能做什么?(高频场景) 4. 过滤…...

真・三国无双 起源 官方正版2026最新版pc免费下载(看到请立即转存 资源随时失效)手机版通用

下载链接 破局与重塑&#xff1a;——《真・三国无双 起源》制作团队、玩法架构与竞品技术对标 作为光荣特库摩&#xff08;Koei Tecmo&#xff09;旗下最具代表性的动作砍杀IP最新作&#xff0c;《真・三国无双 起源》&#xff08;Dynasty Warriors: Origins&#xff09;在延…...

鸿蒙PC中获取并使用DevEco Studio

鸿蒙PC中获取并使用DevEco Studio 一、前言 本文由 AtomCode 协助润色 随着鸿蒙生态的不断扩展&#xff0c;DevEco Studio 也推出了适配鸿蒙 PC 的预览版本。本文将详细介绍如何申请公测名额、下载安装 DevEco Studio&#xff0c;以及创建/导入项目并安装到鸿蒙设备。 前置条…...