消息中间件
RocketMQ、RabbitMQ
深漂小码哥
芝兰生于深林,不以无人而不芳;君子修道立德,不为穷困而改节!
展开
-
RabbitMQ工作原理及名词解释
消息队列服务器实体(Broker):接收和分发消息的应用,RabbitMQ Server就是Message Broker 虚拟主机(Virtual Host):出于多租户和安全因素设计的,把AMQP的基本组件分到一个虚拟的分组中,类似于网络中的Namesapce概念,当多个不同的用户使用同一个RabbitMQ Server提供的服务时,可以划分出多个Host,每个用户在自己的Vhost创建exchange/queue等 信道(Channel): 交换机(Exchange): 队列(Queue)...原创 2022-04-09 16:46:19 · 504 阅读 · 0 评论 -
RabbitMQ 工作队列模式 Work Queue
1.概述工作队列又称任务队列,主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装成消息并发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。2.抽取工具类package com.rabbitmq.utils;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com..原创 2022-04-09 18:00:30 · 663 阅读 · 0 评论 -
【PHP版】RabbitMQ 消费者参数说明
$channel->basic_consume('hello', '', false, true, false, false, $callback);查看源码public function basic_consume( $queue = '', $consumer_tag = '', $no_local = false, $no_ack = false, $exclusive = false, .原创 2021-08-15 17:04:25 · 833 阅读 · 0 评论 -
RabbitMQ SpringBoot 发布确认高级
1.配置文件spring.rabbitmq.host=127.0.0.1spring.rabbitmq.port=5672spring.rabbitmq.username=guestspring.rabbitmq.password=guestspring.rabbitmq.publisher-confirm-type=correlatedspring.rabbitmq.published-returns=truespring.mvc.pathmatch.matching-strategy=原创 2022-04-16 16:33:07 · 1766 阅读 · 0 评论 -
【PHP版】RabbitMQ 6种工作模式示例
1.Hello World(1)send.php<?phprequire_once __DIR__ . '/vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;use PhpAmqpLib\Message\AMQPMessage;$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$channel原创 2021-08-15 17:12:15 · 757 阅读 · 0 评论 -
RabbitMQ SpirngBoot延迟队列
1.概述(1)概念延迟队列,队列内部是有序的,最重要的特性就体现在它的延时性上,延时队列中的元素是希望在指定时间到了以后或之前取出或处理,简单来说,延迟队列就是用来存放需要在指定时间被处理的元素的队列(2)使用 场景订单在十分钟之内未支付则自动取消 新创建的店铺,如果在十天内都没上传过商品,则自动发送消息提醒 用户注册成功之后,如果三天内没有登录则进行短信提醒 用户发起退款,如果三天内没有得到处理则通知相关运营人员 预订会议后,需要在预订的时间点前十分钟通知各个与会人员参加会议2.原创 2022-04-14 07:46:22 · 2209 阅读 · 0 评论 -
【Golang版】RabbitMQ 6种工作模式示例
go get github.com/rabbitmq/amqp091-go1.Hello World2.工作队列模式3.发布/订阅模式4.路由模式5.主题模式6.RPC模式原创 2021-08-15 21:08:38 · 832 阅读 · 0 评论 -
RabbitMQ SpringBoot 基于插件的延迟队列
1.下载延迟插件并安装GitHub - rabbitmq/rabbitmq-delayed-message-exchange: Delayed Messaging for RabbitMQ2.配置package com.mq.rabbit.config;import org.springframework.amqp.core.Binding;import org.springframework.amqp.core.BindingBuilder;import org.springfram原创 2022-04-16 10:52:52 · 2068 阅读 · 0 评论 -
RabbitMQ 主题模式即topic类型交换机
1.概述类型是topic交换机的消息的routing key 不能随意写,必须满足一定的要求,它必须是一个单词列表,以点号分隔开,星号(*)可以代替一个单词,井号(#)可以代替零个或多个单词2.举例Q1绑定的是:中间带orange带3个单词的字符串Q2绑定的是:最后一个单词是rabbit的3个单词的字符串;第一个单词是lazy的多个单词quick.orange.rabbit 被Q1Q2接收 lazy.orange.elephant 被Q1和Q2接收 quick.orange.原创 2022-04-11 22:27:12 · 1561 阅读 · 0 评论 -
RabbitMQ+Swoole多进程消费
producer.php<?phptry { // 1.建立连接 $connection = new AMQPConnection([ 'host' => '127.0.0.1', 'port' => 5672, 'vhost' => '/', 'login' => 'guest', 'password' => 'guest' ]); $connecti原创 2021-08-14 10:59:12 · 991 阅读 · 0 评论 -
RabbitMQ入门 Hello-World模式
1.pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache原创 2022-04-09 16:48:46 · 678 阅读 · 0 评论 -
RabbitMQ死信队列
1.概念死信,就是无法被消费的消息,一般来说生产者将消息投递到broker或者直接到队列里了,消费者从队列取出消息进行消费,但某些时候由于特定的原因导致队列中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有死信队列。2.应用场景(1)为了保证订单业务的数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息消费发生异常时,将消息投入死信队列中(2)用户在商城下单成功并点击支付后,在指定时间内未支付将自动失效3.死信来源(1)消息TTL过期(2)原创 2022-04-12 07:42:43 · 1839 阅读 · 0 评论 -
【PHP版】Windows安装AMQP扩展
请自行先安装rabbitmq, 然后安装php扩展1. 查看基本信息2.下载amqp扩展https://pecl.php.net/package/amqp/1.10.2/windows(1)将rabbitmq.4.dll 放到E:\phpstudy\Extensions\php\php7.4.3nts下(2)将php_amqp.dll放到E:\phpstudy\Extensions\php\php7.4.3nts\ext3.修改配置文件php.ini 添加ext..原创 2021-08-15 16:08:57 · 870 阅读 · 0 评论 -
【Java版】RabbitMQ 6种工作模式示例
1.Hello World2.工作队列模式3.发布/订阅模式4.路由模式5.主题模式6.RPC模式原创 2021-08-15 21:25:58 · 387 阅读 · 0 评论 -
RabbitMQ 路由模式即直接交换机
1.路由交换机这种类型的工作方式是,消息只去到它绑定的routing key的队列中去2.实战(1)图示(2)代码实现package com.rabbitmq.six;import com.rabbitmq.client.Channel;import com.rabbitmq.utils.MqUtils;import java.io.IOException;import java.util.Scanner;import java.util.concurrent..原创 2022-04-10 22:45:53 · 997 阅读 · 0 评论 -
【Python版】RabbitMQ 6种工作模式示例
1.Hello World2.工作队列模式3.发布/订阅模式4.路由模式5.主题模式6.RPC模式原创 2021-08-15 21:24:39 · 438 阅读 · 0 评论 -
RabbitMQ发布确认原理、三种模式
1.概念生产者将信道设置成confirm模式,一旦信道进入confirm模式,所有在该信道上发布的消息都将会被指派一个唯一的ID(从1开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息的唯一ID),这就使得生产者知道消息已经到达目的队列了,如果消息和队列时可持久化的,那么确认消息会在将消息写入磁盘之后发出,broker回传给生产者的确认消息中delivery-tag域包含了确认消息的序列号,此外broker也可以设置basic.ack的multiple域,表示这个原创 2022-04-10 14:11:46 · 1330 阅读 · 1 评论 -
RabbitMQ 发布订阅模式即扇区交换机
1.发布-订阅模式工作队列模式是每个任务都恰好交给一个消费者(工作进程),将消息传达给多个消费者称为发布-订阅模式2.交换机Exchange(1)概念RabbitMQ消息传递模型的核心思想是:生产者生产的消息从来不会直接发送到队列。实际上,通常生产者都不知道这些消息传递到哪些队列中。相反,生产者只能将消息发送到交换机,交换机工作的内容非常简单,一方面它接收来自生产者的消息,另一方面将它们推入队列。交换机必须确切知道如何处理收到的消息,是应该把这些消息放到特定队列,还是把它们放到许多队列中原创 2022-04-10 21:55:16 · 450 阅读 · 0 评论 -
RabbitMQ消息应答
1.概念消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了,会发生什么情况,RabbitMQ一旦向消费者传递了一条消息,便立即将该消息标记为删除。在这种情况下,突然有个消费者挂掉了,我们将丢失正在处理的消息以及后续发送给该消费者的消息,因为它无法接收到,为了保证消息在发送过程中不丢失,rabbitmq引入消息应答机制,消息应答就是,消费者在接收到消息并且处理该消息之后,告诉rabbimq它已经处理了,rabbitmq可以把该消息删除了2.自动应答消原创 2022-04-09 21:42:37 · 5113 阅读 · 0 评论 -
RabbitMQ 消息队列和消息持久化及不公平分发及预取值
1.概念如何保障RabbitMQ服务停掉以后生产者发送过来的消息不丢失。默认情况下RabbitMQ退出或者由于某种原因崩溃时,它忽视队列和消息,除非告知它不要这样做,确保消息不会丢失需要做两件事:需要将队列和消息都持久化2.队列持久化// 第2个参数为true-表示队列持久化 channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);3.消息持久化 // 第3个参数Messag原创 2022-04-10 08:46:03 · 869 阅读 · 0 评论 -
RocketMQ批量消息
1.代码(1)生产者package com.mq.rocket.batch;import org.apache.rocketmq.client.exception.MQBrokerException;import org.apache.rocketmq.client.exception.MQClientException;import org.apache.rocketmq.client.producer.DefaultMQProducer;import org.apache.rocke原创 2022-04-25 10:36:21 · 485 阅读 · 0 评论 -
RocketMQ延迟消息
1.代码(1)生产者package com.mq.rocket.delay;import org.apache.rocketmq.client.exception.MQBrokerException;import org.apache.rocketmq.client.exception.MQClientException;import org.apache.rocketmq.client.producer.DefaultMQProducer;import org.apache.rocke原创 2022-04-25 10:18:54 · 292 阅读 · 0 评论 -
RocketMQ 顺序消息
1.概述消息有序指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ可以严格的保证消息有序,可以分为分区有序或者全局有序。顺序消费的原理解析,在默认的情况下消息发送会采取Round Robin轮询方式把消息发送到不同的queue(分区队列);而消费消息的时候从多个queue上拉取消息,这种情况发送和消费是不能保证顺序。但是如果控制发送的顺序消息只依次发送到同一个queue中,消费的时候只从这个queue上依次拉取,则就保证了顺序。当发送和消费参与的queue只有一个,则是全局有序;如果多原创 2022-04-25 09:38:07 · 578 阅读 · 0 评论 -
RocketMQ消费消息(负载均衡模式和广播模式)
package com.mq.rocket.consumer;import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatu.原创 2022-04-25 08:13:50 · 2007 阅读 · 0 评论 -
RocketMQ发送单向消息
1. 构建maven项目,添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-client --> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifact原创 2022-04-24 21:35:08 · 323 阅读 · 0 评论 -
RocketMQ 发送异步消息
1. 构建maven项目,添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-client --> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifact...原创 2022-04-24 21:25:45 · 869 阅读 · 0 评论 -
RocketMQ 发送同步消息
1. 构建maven项目,添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-client --> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifact原创 2022-04-24 21:13:01 · 739 阅读 · 0 评论 -
org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout
解决办法:添加如下代码producer.setSendMsgTimeout(15000);原创 2022-04-24 20:54:36 · 1904 阅读 · 0 评论