消息队列笔记

异步技术

企业级应用中广泛使用的三种异步消息传递技术

原文链接:https://blog.csdn.net/qq_55917018/article/details/122122218

三种异步消息传递技术

JMS (java message service)

一个Java规范,等同于JDBC规范,提供了与消息服务相关的API接口
JMS只 是一套接口,并没有给予实现,各大厂商和开源组织都对JMS实现不同产品,这些产品 包括:Apache的ActiveMQ、RocketMQ(前期属于阿里巴巴)、IBM的MQSeries、Microsoft的MSMQ和 VM的RabbitMQ(前期属于Spring source)等等,它们基本都遵循JMS规范。 这里介绍的ActiveMQ是最早的JMS开源产品,在Java世界使用比较广泛,在中等规模的 应用中是完全胜任的。当然,如果要真正面面对大型互联网应,要解决超高并发和吞吐 量问题,现在更推荐使用RabbitMQ、Kafuka或者RocketMQ等新一代的分布式产品,但 它们的基本原理和用法是相通的.

JMS消息模型
  • peer-2-peer: 点对点模型,消息发送到一个队列中,队列保存消息。队列中的消息只能被一个消费者消费
  • publish-subscribe: 发布订阅模型,消息可以被多个消费者消息,消费者和生产者完全独立,不需要感知对方的存在
JMS 消息种类
  • TextMessage
  • MapMessage
  • BytesMessage
  • StreamMessage
  • ObjectMessage
  • Message
JMS实现:ActiveMQ、Redis、HornetMQ、RabbitMQ、RocketMQ

AMQP(advanced message queuing protocol)

一种协议(高级消息队列协议,也是消息代理规范),规范了网络交换的数据格式
**解决:**服务跨平台,服务器供应商、生产者,消费者可以使用不同的语言来实现

AMQP消息模型:
  • direct exchange
  • fanoout exchange
  • topic exchange
  • headers exchange
  • system exchange
消息种类:byte[]
  • AMQP实现:RabbitMQ、StormMQ、RocketMQ

MQTT(Message Queueing Telemetry Transpory)

消息队列遥测传输、专为小设备涉及、是物联网生态系统中主要成分之一

实测

ActiveMQ

下载

官网下载

安装(windows)

在这里插入图片描述

启动

在这里插入图片描述在这里插入图片描述
服务端口:61616
管理后台端口:8161
ActiveMQ后台:http://127.0.0.1:8161
默认账号、密码:admin\admin

springboot 整合

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId></dependency>

点对点模式

server:port: 8080
spring:activemq:broker-url: tcp://localhost:61616jms:template:default-destination: com.yinhaipub-sub-domain: false

destination:可指定

@Service
public class MessageServiceImpl  implements MessageService {@AutowiredJmsMessagingTemplate jmsTemplate;
//    private ArrayList list = new ArrayList();@Overridepublic String sendMessage(String id) {System.out.println("消息已经放入队列中了:"+id);jmsTemplate.convertAndSend("order.queue.id",id);
//        final boolean add = list.add(id);return "1";}@Overridepublic String doMessage() {
//        final Object id = list.remove(0);final String s = jmsTemplate.receiveAndConvert("order.queue.id",String.class);System.out.println("消息已经发送成功了id:"+s);return "1";}
}
JmsListener 监听

监听到队列有消息放入后立马通过入参接收消息

@SendTo(“队列名”)

将入参放入另外一个消息队列

@Component
public class ActiveMQListener {@Autowiredprivate JmsTemplate jmsTemplate;@JmsListener(destination = "order.queue.id")@SendTo("other")private String snedMessage(String message){
//        final String s = (String) jmsTemplate.receiveAndConvert();System.out.println("-------------收到后发送:"+message);return message;}
}

RabbitMQ

RabbitMQ 是基于Erlang语言编写的,所以先要安装Erlang语言环境
自行去官网下载

安装Erlang

下载完成后配置环境变量ERLANG_HOME
在这里插入图片描述
Path
在这里插入图片描述

安装RabbitMQ

自行去官网下载,windows下exe 直接傻瓜式安装
启动:
start/stop
在这里插入图片描述
注:启动时报下图错误则是因为已经自启动了
在这里插入图片描述

注:如果Erlang版本和Rabbitmq版本不匹配报其他错误

启动管理界面插件
rabbitmq-plugins.bat enable rabbitmq_management

服务端口:5672 管理后台端口:15672
管理界面:http://localhost:15672/
默认密码: guest/guest

Springboot 整合

坐标

   <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

配置

server:port: 8080
spring:rabbitmq:host: localhostport: 5672

队列、交换机配置 ---- DirectExchange

@Configuration
public class RabbimtDirectConfig {@Beanpublic Queue queue() {// durable 是否持久化 默认false// exclusive  是否当前连接专用 默认false 当前连接关闭后即被删除// autoDelete 是否自动删除 默认false  生产者消费者不再使用就删除return new Queue("direct.queue");}@Beanpublic DirectExchange directExchange() {return new DirectExchange("direct.exchange");}@BeanBinding binding(Queue queue, DirectExchange directExchange) {return BindingBuilder.bind(queue).to(directExchange).with("direct");}
}

放入消息

@Service
public class MessageServiceImpl  implements MessageService {@Autowiredprivate RabbitTemplate rabbitTemplate;//    private ArrayList list = new ArrayList();@Overridepublic String sendMessage(String id) {System.out.println("消息已经放入队列中了:"+id);rabbitTemplate.convertAndSend("direct.exchange", "direct", id);
//        final boolean add = list.add(id);return "1";}@Overridepublic String doMessage() {
//        final Object id = list.remove(0);
//        final String s = jmsTemplate.receiveAndConvert("order.queue.id",String.class);//        System.out.println("消息已经发送成功了id:"+s);return "1";}
}

监听

@Component
public class RabbitListenre {@RabbitListener(queues="direct.queue")public void listen(String id) {System.out.println("从队列中取出"+id);}
}

队列、交换机配置 ---- TopExchange

匹配规则:模糊匹配
一 :(*)用来表示一个单词,该单词必须出现
二 :(#):用来表示任意数量
在这里插入图片描述

@Configuration
public class RabbimtTopicConfig {@Beanpublic Queue topicqueue() {return new Queue("topic.queue");}@Beanpublic TopicExchange topicExchange() {return new TopicExchange("topic.exchange");}@BeanBinding bindingTopic(Queue topicqueue, TopicExchange topicExchange) {return BindingBuilder.bind(topicqueue).to(topicExchange).with("topic.#");}
}
  @Overridepublic String sendMessage(String id) {System.out.println("消息已经放入队列中了:"+id);rabbitTemplate.convertAndSend("topic.exchange", "topic.asdasd.asds", id);
//        final boolean add = list.add(id);return "1";}

消息监听

@Component
public class RabbitListenre {@RabbitListener(queues="topic.queue")public void listen(String id) {System.out.println("从队列中取出"+id);}
}

RocketMQ

Kakfa

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle数据库面试题-9

81. 请解释Oracle数据库中的林业数据处理方法。 Oracle数据库中的林业数据处理 在Oracle数据库中处理林业数据涉及到存储、管理、分析和可视化与林业相关的数据。以下是林业数据处理的一些关键方面以及如何使用Oracle数据库进行示例性的SQL说明&#xff1a; 数据库设计&#…

Web后端开发(请求-简单参数)(一)

原始方式&#xff1a; 在原始的web程序中&#xff0c;获取请求参数&#xff0c;需要通过HttpServletRequest 对象手动获取。 RequestMapping("/simpleParam") public String simpleParam(HttpServletRequest request){//获取请求参数String name request.getParame…

小阿轩yx-iptables 防火墙

小阿轩yx-iptables 防火墙 Linux 防火墙基础 体系主要工作在 网络层针对TCP/IP 数据包实施过滤和限制 属于典型的包过滤防火墙&#xff08;或者称为网络层防火墙&#xff09; 体系基于内核编码实现 好处 具有非常稳定的性能高效率 防火墙两个表示 netfilteriptables …

代码随想录算法训练营第四天|24. 两两交换链表中的节点 |19.删除链表的倒数第N个节点 | 面试题 02.07. 链表相交 | 142.环形链表II

24. 两两交换链表中的节点 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;帮你把链表细节学清楚&#xff01; | LeetCode&#xff1a;24. 两两交换链表中的节点_哔哩哔哩_bilibili 1. 第一想法是不知道这个题如何做&#xff0c;知道有改变指针这个操作。 2. 双指针也太…

学习分享-为什么把后台的用户验证和认证逻辑放到网关

将后台的用户验证和认证逻辑放到网关&#xff08;API Gateway&#xff09;中是一种常见的设计模式&#xff0c;这种做法在微服务架构和现代应用中有许多优势和理由&#xff1a; 1. 集中管理认证和授权 统一的安全策略 在一个包含多个微服务的系统中&#xff0c;如果每个服务…

优化扩散模型中的采样计划

在生成模型领域&#xff0c;扩散模型&#xff08;Diffusion Models, DMs&#xff09;因其卓越的生成质量而成为最新的技术趋势。但这些模型的一个关键缺点是它们的采样速度较慢&#xff0c;需要通过大型神经网络进行多次顺序函数评估。扩散模型通过一个称为采样计划的离散噪声水…

Golang | Leetcode Golang题解之第130题被围绕的区域

题目&#xff1a; 题解&#xff1a; var (dx [4]int{1, -1, 0, 0}dy [4]int{0, 0, 1, -1} ) func solve(board [][]byte) {if len(board) 0 || len(board[0]) 0 {return}n, m : len(board), len(board[0])queue : [][]int{}for i : 0; i < n; i {if board[i][0] O {q…

xmind父主题快捷键Ctrl+Enter

xmind父主题快捷键 CtrlEnter

实验八、地址解析协议《计算机网络》

水逆退散&#xff0c;学业进步&#xff0c;祝我们都好&#xff0c;不止在夏天。 目录 一、实验目的 二、实验内容 &#xff08;1&#xff09;预备知识 &#xff08;2&#xff09;实验步骤 三、实验小结 一、实验目的 完成本练习之后&#xff0c;您应该能够确定给定 IP 地…

MySQL之查询性能优化(十二)

查询性能优化 优化COUNT()查询 4.使用近似值 有时候某些业务场景并不要求完全精确的COUNT值&#xff0c;此时可以用近似值来代替。EXPLAIN出来的优化器估算的行数就是一个不错的近似值&#xff0c;执行EXPLAIN并不需要真正地去执行查询&#xff0c;所以成本很低。很多时候&am…

【消灭星星game】

“消灭星星”&#xff08;PopStar&#xff09;是一款非常受欢迎的益智游戏&#xff0c;游戏目标是在一个网格中消除相同颜色的星星&#xff0c;一次消除的星星数量越多&#xff0c;得分越高。以下是一个简化版的消灭星星游戏的Python代码示例&#xff0c;用于演示基本的游戏逻辑…

智能数据分析(2)Lecture 9-11

Lecture 9: Feature Analysis and Dimensionality Reduction 特征选择&#xff08;Feature Selection&#xff09; 特征选择的定义与目标 定义&#xff1a;特征选择指的是从原始特征集中选择一个子集&#xff0c;以减少特征的数量并提升模型的性能。选择的特征子集应当能最好…

【python】python商业客户流失数据模型训练分析可视化(源码+数据集+课程论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

基本通信设备

1、 网卡 &#xff08;1&#xff09;负责将终端机连入网络 &#xff08;2&#xff09;计算机通过网卡接入网络&#xff08;有线、无线&#xff09; 2、 交换机 &#xff08;1&#xff09;连接终端机&#xff0c;构建网段 &#xff08;2&#xff09;负责网段内…

CentOS 7基础操作08_Linux查找目录和文件

1、which命令——查找用户所执行的命令文件存放的目录 which命令用于查找Linux命令程序并显示所在的具体位置.其搜索范围主要由用户的环境变量PATH决定(可以执行言echo sPATH”命令查看),这个范围也是Linux操作系统在执行命令或程序时的默认搜索路径。 which命令使用要查找的命…

论文复现:Track to Detect and Segment: An Online Multi-Object Tracker

论文下载链接&#xff1a;链接 简单介绍&#xff1a;大多数在线多目标跟踪器在神经网络中独立执行目标检测&#xff0c;无需任何跟踪输入。在本文中提出了一种新的在线联合检测和跟踪模型TraDeS&#xff08;TRAck to DEtect and Segment&#xff09;&#xff0c;利用跟踪线索…

一个例子了解c++的指针数组和数组指针

c的指针数组和数组指针容易混淆&#xff0c;所以我们加个字&#xff1a; 指针的数组和数组的指针 所谓指针数组&#xff0c;就是指针的数组&#xff0c;就是由指针组成的数组。重点在后面的两个字&#xff1a;数组 所谓数组指针&#xff0c;就是数组的指针&#xff0c;就是指向…

基于协调过滤算法商品推荐系统的设计#计算机毕业设计

基于协调过滤算法商品推荐系统的设计#计算机毕业设计 管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品管理&#xff0c;论坛管理&#xff0c;商品资讯管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;论坛&#xf…

MySQL-二进制部署-配置systemctl管理脚本(一)

一 二进制部署MySQL 参考二进制部署mysql 二 MySQL启动&关闭命令 mysqld_sqfe 是 mysqld 父进程&#xff0c;用那个启动都可以 ##启动命令 /usr/local/mysql/bin/mysqld_safe --defaults-file/data/mysql/conf/my.cnf & /usr/local/mysql/bin/mysqld --defaults-fil…

数字校园的优势有哪些

数字化时代下&#xff0c;数字校园已成为教育领域一股显著趋势。数字校园旨在借助信息技术工具对传统校园进行改造&#xff0c;提供全新的教学、管理和服务方式。那么&#xff0c;数字校园究竟具备何种优势&#xff1f;现从三个方面为您详细介绍。 首先&#xff0c;数字校园为教…