| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 8.SpringBoot 与消息 -> 正文阅读 |
|
[Java知识库]8.SpringBoot 与消息 |
目录 1.导?springboot整合ActiveMQ的starter? 3.使?JmsMessagingTemplate操作ActiveMQ? 1.导?springboot整合RocketMQ的starter 3.使?RocketMQTemplate操作RocketMQ? ?1.导?springboot整合Kafka的starter 消息队列MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的?种数据结构。指把要传输的数据(消息)放在队列中,?队列机制来实现消息传递——?产者产?消息并把消息放?队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息。 MQ作?1.流量消峰 在?量请求时(秒杀场景),使?消息队列做缓冲处理,削弱峰值流量,防?系统在短时间内被峰值流量冲垮。 2.应?解耦 使?消息MQ后,只需要保证消息格式不变,不需要关?发布者及消费者之间的关系,这两者不需要彼此联系 3.异步处理 对于消息的?产者与消费者的?作模式,还可以将消息划分成两种模式,同步消费与异步消息。 1 处理消息规则?前企业级开发中?泛使?的消息处理技术共三?类,具体如下:
????????这些都是规范,就想JDBC技术,是个规范,开发针对规范开发,运?还要靠实现类,例如MySQL提供了JDBC的实现,最终运?靠的还是实现。并且这三类规范都是针对异步消息进?处理的,也符合消息的设计本质,处理异步的业务。 JMSJMS(Java Message Service),这是?个规范,作?等同于JDBC规范,提供了与消息服务相关的API接?。 JMS消息模型????????JMS规范中规范了消息有两种模型。分别是点对点模型和发布订阅模型。 ????????点对点模型:peer-2-peer,?产者会将消息发送到?个保存消息的容器中,通常使?队列模型,使?队列保存消息。?个队列的消息只能被?个消费者消费,或未被及时消费导致超时。这种模型下,?产者和消费者是?对?绑定的。 ????????发布订阅模型:publish-subscribe,?产者将消息发送到?个保存消息的容器中,也是使?队列模型来保存。但是消息可以被多个消费者消费,?产者和消费者完全独?,相互不需要感知对?的存在。 以上这种分类是从消息的?产和消费过程来进?区分,针对消息所包含的信息不同,还可以进?不同类别的划分。 JMS消息种类????????根据消息中包含的数据种类划分,可以将消息划分成6种消息。
????????JMS主张不同种类的消息,消费?式不同,可以根据使?需要选择不同种类的消息。例如ActiveMQ、Redis、HornetMQ。但是也有?些不太规范的实现,参考JMS的标准设计,但是?不完全满?其规范,例如:RabbitMQ、RocketMQ。? AMQP????????JMS的设计是J2EE规范,站在Java开发的?度思考问题。但是现实往往是复杂度很?的。?如我有?个.NET开发的系统A,有?个Java开发的系统B,现在要从A系统给B系统发业务消息,结果两边数据格式不统?,没法操作。JMS不是可以统?数据格式吗?提供了6种数据种类,因为A系统的底层语?不是Java语?开发的,根本不?持那些对象。这就意味着如果想使?现有的业务系统A继续开发已经不可能了,必须推翻重新做使?Java语?开发的A系统。 ????????AMQP的出现解决的是消息传递时使?的消息种类的问题,化繁为简,但是其并没有完全推翻JMS的操作API,所以说AMQP仅仅是?种协议,规范了数据传输的格式?已。 ????????AMQP(advanced message queuing protocol):?种协议(?级消息队列协议,也是消息代理规范),规范了?络交换的数据格式,兼容JMS操作。 优点 AMQP消息种类:????????byte[] ????????AMQP在JMS的消息模型基础上?进?了进?步的扩展,除了点对点和发布订阅的模型,开发了?种全新的消息模型,适应各种各样的消息发送。 AMQP消息模型
?????????前实现了AMQP协议的消息中间件技术也很多,?且都是较为流?的技术,例如:RabbitMQ、StormMQ、RocketMQ? MQTT?????????MQTT(Message Queueing Telemetry Transport)消息队列遥测传输,专为?设备设计,是物联?(IOT)?态系统中主要成分之?。由于与JavaEE企业级开发没有交集,此处不作过多的说明。 2.Spring整合ActiveMQ????????ActiveMQ是MQ产品中的元?级产品,早期标准MQ产品之?,在AMQP协议没有出现之前,占据了消息中间件市场的绝?部分份额,后期因为AMQP系列产品的出现,迅速?弱,?前仅在?些线上运?的产品中出现,新产品开发较少采?。 安装(以windows为例)??????? 官方下载地址https://activemq.apache.org/components/classic/download/ 解压即可启动服务器运?bin?录下的win32或win64?录下的activemq.bat命令即可,根据??的操作系统选择即可,默认对外服务端?61616。 ?访问web管理服务????????ActiveMQ启动后会启动?个Web控制台服务,可以通过该服务管理ActiveMQ。
????????web管理服务默认端?8161,访问后可以打开ActiveMQ的管理界?,如下: ??????????先输?访问?户名和密码,初始化?户名和密码相同,均为:admin,成功登录 点击Mange ActiveMQ broker进入主页面 进?管理后台界?,如下: ?????????看到上述界?视为启动ActiveMQ服务成功。 点对点消息列表 列表各列信息含义如下: Number Of Pending Messages? :等待消费的消息 ?这个是当前未出队列的数量。 Number Of Consumers? :消费者??? 这个是消费者端的消费者数量 Messages Enqueued? :进入队列的消息 ???进入队列的总数量,包括出队列的。 Messages Dequeued ?:出了队列的消息??? 可以理解为是消费这消费掉的数量。 整合
1.导?springboot整合ActiveMQ的starter?<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> 2.配置ActiveMQ的服务器地址?server: port: 80 spring: activemq: # 地址端口 broker-url: tcp://localhost:61616 jms: template: # 给mq起一个名字,不然报错 default-destination: zzx 3.使?JmsMessagingTemplate操作ActiveMQ?创建消息服务
????????发送消息需要先将消息的类型转换成字符串,然后再发送,所以是convertAndSend,定义消息发送的位置,和具体的消息内容,此处使?id作为消息 ????????接收消息需要先将消息接收到,然后再转换成指定的数据类型,所以是receiveAndConvert,接收消息除了提供读取的位置,还要给出转换后的数据的具体类型。 创建订单服务
创建controller
postman发送post创建消息请求http://localhost/orders/1 ? ?postman发送get消费消息请求http://localhost/msgs ?如果将消息发送到某个mq队列也可以这样设置
?上述使用postman发送请求 4.使?消息监听器在服务器启动后,监听指定位置,当消息出现后,?即消费消息
?使?注解@JmsListener定义当前?法监听ActiveMQ中指定名称的消息队列。 如果当前消息队列处理完还需要继续向下传递当前消息到另?个队列中使?注解@SendTo即可,这样即可构造连续执?的顺序消息队列。 5.切换消息模型由点对点模型到发布订阅模型,修改jms配置即可 server: port: 80 spring: activemq: # 地址端口 broker-url: tcp://localhost:61616 jms: template: # 给mq起一个名字,不然报错 default-destination: zzx #由点对点模型到发布订阅模型 pub-sub-domain: true ????????pub-sub-domain默认值为false,即点对点模型,修改为true后就是发布订阅模型。?
3. SpringBoot整合RabbitMQRabbitMQ是MQ产品中的?前较为流?的产品之?,它遵从AMQP协议。 RabbitMQ与Erlang版本对应表RabbitMQ Erlang Version Requirements — RabbitMQ Erlang安装(windows版)安装包下载地址Downloads - Erlang/OTP 下载完毕后得到exe安装?件,?键傻?式安装,安装完毕需要重启,需要重启,需要重启。 安装的过程中可能会出现依赖Windows组件的提示,根据提示下载安装即可,都是?动执?的,如下: ?Erlang安装后需要配置环境变量,否则RabbitMQ将?法找到安装的Erlang。需要配置项如下,作?等同JDK配置环境变量的作?。
?安装RabbitMQ????????下载地址:Installing on Windows — RabbitMQ ????????下载完毕后得到exe安装?件,?键傻?式安装 启动服务器?以管理员身份在安装目录的sbin目录下执行命令
或者运?sbin?录下的rabbitmq-service.bat ,默认对外服务端?5672,后台管理端口15672。 访问web管理服务????????RabbitMQ也提供有web控制台服务,但是此功能是?个插件,需要先启?才可以使?。
启动插件后可以在插件运?状态中查看是否运?,运?后通过浏览器即可打开服务后台管理界?? ????????web管理服务默认端?15672,访问后可以打开RabbitMQ的管理界?,如下:? ??????????先输?访问?户名和密码,初始化?户名和密码相同,均为:guest,成功登录后进?管理后台界?,如下: ?整合(direct模型)????????RabbitMQ满?AMQP协议,因此不同的消息模型对应的制作不同,先使?最简单的direct模型开发。 1.导?springboot整合amqp的starteramqp协议默认实现为rabbitmq?案 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2.配置RabbitMQ的服务器地址?server: port: 80 spring: rabbitmq: #地址 host: localhost #对外提供服务端口 port: 5672 3.初始化直连模式系统设置????????由于RabbitMQ不同模型要使?不同的交换机,因此需要先初始化RabbitMQ相关
????????队列Queue与直连交换机DirectExchange创建后,还需要绑定他们之间的关系Binding,这样就可以通过交换机操作对应队列。 4.使?AmqpTemplate操作RabbitMQ创建服务
5.使?消息监听器在服务器启动后,监听指定位置,当消息出现后,?即消费消息
????????使?注解@RabbitListener定义当前?法监听RabbitMQ中指定名称的消息队列。? 创建controller
postman发送post请求http://localhost/orders/3 ?整合(topic模型)1.初始化主题模式系统设置
????????主题模式?持routingKey匹配模式,*表示匹配?个单词,#表示匹配任意内容,这样就可以通过主题交换机将消息分发到不同的队列中 2.使?AmqpTemplate操作RabbitMQ
????????发送消息后,根据当前提供的routingKey与绑定交换机时设定的routingKey进?匹配,规则匹配成功消息才会进?到对应的队列中。? 3.使?消息监听器在服务器启动后,监听指定队列
????????使?注解@RabbitListener定义当前?法监听RabbitMQ中指定名称的消息队列。 其他与direct模型一样
4 SpringBoot整合RocketMQ?????????RocketMQ 是阿?巴巴在2012年开源的分布式消息中间件,?前已经捐赠给Apache 软件基?会,并于2017年9?25?成为 Apache 的顶级项?。作为经历过多次阿?巴巴双??的洗礼并有稳定出?表现的国产中间件,以其?性能、低延时和?可靠等特性近年来已经也被越来越多的企业使?,它遵从AMQP协议。 下载:下载地址:下载 | RocketMQ????????Binary 下载 RocketMQ安装后需要配置环境变量,具体如下:
??????? RocketMQ是基于jdk8环境完成的,所以最好有一个免安装的jdk8 RocketMQ?作模式??????????在RocketMQ中,处理业务的服务器称为broker,?产者与消费者不是直接与broker联系的,?是通过命名服务器进?通信。broker启动后会通知命名服务器??已经上线,这样命名服务器中就保存有所有的broker信息。当?产者与消费者需要连接broker时,通过命名服务器找到对应的处理业务的broker,因此命名服务器在整套结构中起到?个信息中?的作?。并且broker启动前必须保障命名服务器先启动。 ? ?启动服务器
测试服务器启动状态?RocketMQ提供有?套测试服务器功能的测试程序,运?bin?录下的tools命令即可使?。
整合1.导?springboot整合RocketMQ的starter此坐标不由springboot维护版本 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version> 2.2.1</version> </dependency> 2.配置RocketMQ的服务器地址?rocketmq: #地址 name-server: loclhost:9876 #生产者组 producer: group: group_rocketmq ????????设置默认的?产者消费者所属组group。? 3.使?RocketMQTemplate操作RocketMQ?
?使?asyncSend?法发送异步消息。 4.使?消息监听器监听指定位置,当消息出现后,?即消费消息
?RocketMQ的监听器必须按照标准格式开发,实现RocketMQListener接?,泛型为消息类型。 使?注解@RocketMQMessageListener定义当前类监听RabbitMQ中指定组、指定名称的消息队列。?
5.SpringBoot整合Kafka??????????Kafka是由Apache软件基?会开发的?个开源流处理平台,由Scala和Java编写。Kafka 是?种?吞吐量的分布式发布订阅消息系统,它可以处理消费者在?站中的所有动作流数据。 下载安装下载地址Apache Kafka 解压安装即可 启动服务器????????kafka服务器的功能相当于RocketMQ中的broker,kafka运?还需要?个类似于命名服务器的服务。在kafka安装?录中?带?个类似于命名服务器的?具,叫做zookeeper,它的作?是注册中? ??????? 在安装目录的bin目录里的windows目录下执行命令
????????运?bin?录下的windows?录下的zookeeper-server-start命令即可启动注册中?,默认对外服务端?2181。 创建主题????????kakfa也是基于主题操作,操作之前需要先初始化topic。
?测试服务器启动状态????????Kafka提供有?套测试服务器功能的测试程序,运?bin?录下的windows?录下的命令即可使?
整合?1.导?springboot整合Kafka的starter此坐标由springboot维护版本 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> 2.配置Kafka的服务器地址?spring: kafka: #地址 bootstrap-servers: localhost:9092 # id consumer: group-id: order ????????设置默认的?产者消费者所属组id。? 3.使?KafkaTemplate操作Kafka
?????????使?send?法发送消息,需要传?topic名称。 4.使?消息监听器服务器启动后,监听指定位置,当消息出现后,?即消费消息?
?????????使?注解@KafkaListener定义当前?法监听Kafka中指定topic的消息,接收到的消息封装在对象ConsumerRecord中,获取数据从ConsumerRecord对象中获取即可。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:22:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |