RabbitMQ基础概念及入门demo示例

RabbitMQ入门案例 案例中生产者叫做 Task,一个消费者就是一个工作队列,启动两个工作队列消费消息,这个两个工作队列会以轮询的方式消费消息。假设生产者生产 AA BB CC DD这四条消息,理论上工作线程C1和工作线程C2轮询接收到消息,期望测试结果如下。轮询消费消息指的是轮流消费消息,即每个工作队列都会获取一个消息进行消费,并且获取的次数按照顺序依次往下轮流。创建一个类作为消费者,消费 RabbitMQ 队列的消息,消息消费是通过Channel来完成的。在运行第二个工作线程,此时已经开了两个工作线程,如下。 阅读详情

1.RabbitMQ

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)

1.1 前置概念

1.1.1 AMQP核心概念

在这里插入图片描述

虚拟主机(virtual host)或(vhost)
  • 一组交换机、队列和绑定器被称为 虚拟主机(vhost)
  • RabbitMQ server 可以说就是一个消息队列服务器实体(Broker)
    • Broker当中可以有多个用户,而用户只能在虚拟主机的粒度进行权限控制,所以RabbitMQ中需要多个虚拟主机
    • 每一个RabbitMQ服务器都有一个默认的虚拟主机
交换机(exchange)
  • 它指定消息按什么规则,路由到哪个队列。它可以被理解成具有路由表的路由程序。(发送消息的实体)
  • 交换机可以存在多个,每个交换机在自己独立的进程当中执行,因此增加多个交换机就是增加多个进程,可以充分利用服务器上的CPU核以便达到更高的效率。
  • Exchange的类型
    • Direct:直接交换机通过消息上的路由键直接对消息进行分发,相当于精确匹配,一对一
    • Topic:这个交换机会将路由键和绑定上的模式进行通配符匹配,相当于模糊匹配,一对多
    • Fanout:交换机会将消息发送到所有和它进行绑定的队列上,广播,群发
    • Headers:消息头交换机使用消息头的属性进行消息路由,相当于模糊匹配(like header%),一对多
队列(queue)
  • 队列是消息载体,每个消息都会被投入到一个或多个队列
  • 试图创建一个已经存在的队列,RabbitMQ会直接忽略这个请求(接收消息的实体)。
绑定器(bind)
  • 作用:把exchange和queue按照路由规则绑定起来
    • 将交换器和队列连接起来,并且封装消息的路由信息

1.1.2 程序中连接与消息使用的两个关键概念

连接(Connection)
  • 与RabbitMQ Server建立的一个连接
    • 由ConnectionFactory创建
    • 每个connection只与一个物理的Server进行连接,此连接是基于Socket进行连接的
  • AMQP一般使用TCP
通道 (Channel)
  • 消息通道(主要进行相关定义,发送消息,获取消息,事务处理等)
  • 在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务

在这里插入图片描述

1.2 七种工作模式

在这里插入图片描述

  • 简单模式:一个生产者,一个消费者
  • work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一
  • 订阅模式:一个生产者发送的消息会被多个消费者获取
  • 路由模式: 发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由key
  • topic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词
  • RPC模式:使用RabbitMQ构建RPC系统:客户端和可伸缩RPC服务器
  • 发布确认:与发布者进行可靠的发布确认

1.3 安装

# 1.拉取镜像
[root@izbp1j6sv2mtxgnuthuw6bz ~]# docker pull rabbitmq:3.8-management
# 2.查看镜像
[root@izbp1j6sv2mtxgnuthuw6bz ~]# docker images
# 3.启动
[root@izbp1j6sv2mtxgnuthuw6bz ~]# docker run -itd --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.8-management
a5ca877169d4eda31a9c404f94565c118f1cc64de2cbb398ff17a66e72c682cd
# 4.查看启动情况
[root@izbp1j6sv2mtxgnuthuw6bz ~]# docker ps
CONTAINER ID   IMAGE                     COMMAND                  CREATED         STATUS         PORTS                                                                                                         NAMES
a5ca877169d4   rabbitmq:3.8-management   "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp   rabbitmq
问题
  • 防火墙问题
  • 启动web管理界面
# 进入rabbitmq
[root@izbp1j6sv2mtxgnuthuw6bz ~]# docker exec -it rabbitmq bash
# 启动web管理界面
root@a5ca877169d4:/# rabbitmq-plugins enable rabbitmq_management

1.3.1 添加新用户

# 创建账号
root@a5ca877169d4:/# rabbitmqctl add_user admin admin
Adding user "admin" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.

# 设置用户角色
root@a5ca877169d4:/# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...

# 设置用户权限
# set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
# 用户 admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限
root@a5ca877169d4:/# rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
Setting permissions for user "admin" in vhost "/" ...

# 查看当前用户和角色
root@a5ca877169d4:/# rabbitmqctl list_users
Listing users ...
user    tags
admin   [administrator]
guest   [administrator]

1.3 Hello World

  • 在本教程的这一部分中,我们将用 Java 编写两个程序;

  • 发送单个消息的生产者和接收消息并将其打印出来的消费者

  • 在下图中,“P”是我们的生产者,“C”是我们的消费者

  • 中间的盒子是一个队列——RabbitMQ 代表消费者保留的消息缓冲区
    在这里插入图片描述

1.3.1 依赖

<!--指定 jdk 编译版本--> 
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>8</source>
                <target>8</target>
            </configuration>
        </plugin>
    </plugins>
</build> 
<dependencies>
    <!--rabbitmq 依赖客户端-->
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.8.0</version>
    </dependency>
    <!--操作文件流的一个依赖-->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>
</dependencies>

1.3.2 消息生产者

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Producer {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] args) throws Exception {
        //创建一个连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("IP");
        factory.setUsername("admin");
        factory.setPassword("admin");
        //channel 实现了自动 close 接口 自动关闭 不需要显示关闭
        //创建连接
        Connection connection = factory.newConnection();
        //获取信道
        Channel channel = connection.createChannel();
        /**
         * 生成一个队列
         * 1.队列名称
         * 2.队列里面的消息是否持久化 也就是是否用完就删除
         * 3.该队列是否只供一个消费者进行消费 是否进行共享 true 可以多个消费者消费
         * 4.是否自动删除 最后一个消费者端开连接以后 该队列是否自动删除 true 自动删除
         * 5.其他参数 - 延迟、死信等
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        String message = "hello world";
        /**
         * 发送一个消息
         * 1.发送到那个交换机
         * 2.路由的 key 是哪个
         * 3.其他的参数信息,传递的消息携带的properties
         * 4.发送消息的消息体
         */
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println("消息发送完毕");
    }
}

1.3.3 消息消费者

import com.rabbitmq.client.*;

public class Consumer {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("IP");
        factory.setUsername("admin");
        factory.setPassword("admin");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        System.out.println("等待接收消息.........");

        //推送的消息如何进行消费的接口回调
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody());
            System.out.println(message);
        };
        //取消消费的一个回调接口 如在消费的时候队列被删除掉了
        CancelCallback cancelCallback = (consumerTag) -> {
            System.out.println("消息消费被中断");
        };
        /**
         * 消费者消费消息 - 接受消息
         * 1.消费哪个队列
         * 2.消费成功之后是否要自动应答 true 代表自动应答 false 手动应答
         * 3.消费者未成功消费的回调
         * 4.消息被取消时的回调
         */
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
    }
}

1.4 Work Queues

1.4.1 抽取工具类

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class RabbitMqUtils {
    //得到一个连接的 channel
    public static Channel getChannel() throws Exception {
        //创建一个连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("IP");
        factory.setUsername("admin");
        factory.setPassword("123456");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        return channel;
    }
}

1.4.2 启动两个工作线程来接收消息

import com.oddfar.utils.RabbitMqUtils;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

// 这是一个工作线程,相当于之前的消费者
public class Worker01 {

    private static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws Exception {

        Channel channel = RabbitMqUtils.getChannel();
		channel.basicQos(1);
        //消息接受
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String receivedMessage = new String(delivery.getBody());
            System.out.println("接收到消息:" + receivedMessage);
        };
        //消息被取消
        CancelCallback cancelCallback = (consumerTag) -> {
            System.out.println(consumerTag + "消费者取消消费接口回调逻辑");

        };

        System.out.println("C1 消费者启动等待消费.................. ");
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);

    }
}

1.4.3 启动一个发送线程

public class Task01 {
    public static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws Exception {

        Channel channel = RabbitMqUtils.getChannel();
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String message = scanner.next();
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println("消息发送完成:" + message);
        }

    }
}

1.5 小结

server: 服务器

v-host:名称上来说,虚拟主机

exchange: 交换机(消息通常是发送到交换机)

queue: 队列(存放消息的)

bind: 将交换机和队列进行绑定

1.5.1消息队列持久化

创建一个队列的时候,可以是非持久化的,也可以是持久化的

  • 非持久化:rabbitmq如果重启,该队列就会被删除
  • 持久化:重启不影响
  • 消息持久化必须要消息队列持久化
boolean durable = true;
channel.queueDeclare("hello", durable, false, false, null);

1.5.2消息持久化

消息持久化,可以一定程度上去预防消息丢失,需要设置MessageProperties.PERSISTENT_TEXT_PLAIN

注意:配置了消息持久化,并不能完全保证消息不丢失,只能保证消息到了队列中不消失

消息丢失的方式:

  • 发送方发送到队列的时候,丢了
  • 交换机到队列中,丢了
  • 队列到消费者,丢了,目前所学知识点,队列中还有消息,再次发送

后续解决方案,参考确认Confirm,Return

channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());

1.5.3ACK

默认情况下,消费者接受到消息的时候(但是通常接收到消息就处理了),就会进行自动应答(ACK),如果一个消费者处理时间长,或者异常了,所以需要手动ACK

  • 自动ACK
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
    String message = new String(delivery.getBody(), "UTF-8");
    System.out.println(" [x] Received '" + message + "'");
};
//true表示自动:autoAck
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
  • 手动ACK
//1.channel.basicConsume 将true改为false
channel.basicConsume(QUEUE_NAME, false, deliverCallback, consumerTag -> { });

//在finally中手动ack
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);

1.5.4消费不均匀

工作模式中,默认轮询,会出现一些问题,导致消费不均匀,比如:十个消息,分别给两个消费者五个,但消费者能力强的先处理完这五个消息会出现空闲的情况,导致消费不均匀

所以我们可以设置一个抓取值,官网给的是一次抓取一个任务(每次抓取一个消息,当上一个消息没有ack的时候,不抓取新的消息)

int prefetchCount = 1;
channel.basicQos(prefetchCount);

注意:这里的抓取值给的是1,这个值太小(消费者能力比较强),但具体还是看服务性能和消息复杂度,通常情况下100-300

1.6 Publish/Subscribe(fanout)

多出来的x就是交换机,交换机接收发送方的消息,将消息发送到消息队列中,交换机还有不同的类型

Exchange类型:

  • Fanout Exchange(扇型交换机):交换机会将消息发送到所有和它进行绑定的队列,广播,群发。
  • Direct Exchange(直连交换机):直接交换机通过消息上的路由键直接对消息进行分发,相当于精准匹配,一对一
  • Topic Exchange(主题交换机): 这个交换机会将路由键和绑定上的模式进行通配符匹配,相当于模糊匹配,一对多
  • Headers Exchange(头交换机):消息头交换机使用消息头的属性进行消息路由,相当于模糊匹配(like header%),一对多

在这里插入图片描述

1.7Routing(direct)

在上一个发布订阅中,实现了一对多,但是每一个消息,都会执行我们指定的两个操作,粒度更加细致

对于error级别的信息需要打印到控制台,并保存到本地,对于普通信息,只需要打印到控制台

在这里插入图片描述

1.8Topics(topic)

发送到主题交换的消息不能有任意的 routing_key - 它必须是单词列表,由点分隔。

这些词可以是任何东西,但通常它们指定与消息相关的一些特征。一些有效的路由键示例:“ stock.usd.nyse ”、“ nyse.vmw ”、“ quick.orange.rabbit ”。路由键中可以有任意多的单词,最多为 255 个字节。

  • *(星号)可以只替换一个单词。
  • # (hash) 可以代替零个或多个单词。
  • 绑定的时候出现情况
    • 当一个队列绑定的是#,那么这个队列是不是接收了所有消息,这个时候跟fanout有点像
    • 当一个队列绑定的既没有#也没有*,那就是一个direct

在这里插入图片描述

1.9Publisher Confirms

不仅仅是防止发送方到mq的消息丢失,还可以通过异步的方式来提高效率

  1. 为了消息不丢失,持久化,持久化是同步的,可以通过confirm的异步确认提高效率
rabbitMQ 消息顺序性、消息幂等性、消息不丢失、最终一致性、补偿机制、消息队列设计 消息顺序性、消息幂等性、消息不丢失、最终一致性、补偿机制、消息队列设计 阅读详情

相关推荐

RabbitMQ入门Demo,基于springboot

缘起 前面几章我们基本了解了RabbitMQ的基本概念,以及RabbitMQ是如何保证消息的可靠性的,那么本章开始,将真正用java代码去连接使用一些RabbitMQ,通过阅读本章内容,你会明白如何在java springboot的项目中使用RabbitMQ。 阅读人群 项目采用springboot搭建,所以你对springboot需要有一个基本的了解,并且我们假设已经在你的服务器或本机安装了Ra...

诺浅的专栏 757

rabbitmq实践demo

首先创建一个maven项目: idea-->File-->new Project 一个springboot项目建成,初始的pom.xml如下: 在加rabbitmq的jar包,和一个junit的包用来测试 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin...

weixin_43075758的博客 3109

Spring整合RabbitMQ完整示例Demo

Spring AMQP 是 Spring 框架中用于支持 AMQP 协议的模块,其核心目标是简化 RabbitMQ 与 Spring 应用程序之间的集成。它提供了丰富的 API 和组件,使得开发者可以轻松地实现消息的发送与消费。主要的核心组件包括:组件名称作用说明用于建立与 RabbitMQ 服务器的连接提供消息发送的统一接口,封装了底层 AMQP 操作负责监听消息队列并触发消费逻辑基于注解的消息监听器,简化消息消费逻辑的编写。

weixin_30789053的博客 1211

rabbitmq-demo

2.1. 搭建demo工程 创建两个demo工程: 依赖相同: 2.1.1. 生产者 application.yml: server: port: 8080 spring: rabbitmq: host: 172.16.116.100 port: 5672 virtual-host: /fengge username: fengge password: fengge publisher-confirm-type: simple # SIMPLE-

xxy的博客 2097

springboot+rabbitmq项目demo(亲测,可正常运行)

使用springboot+rabbitmq搭建一个简单的消息队列项目。

移动硬盘报错0x80070570?5分钟搞定CHKDSK修复(附详细参数说明)

本文针对移动硬盘报错0x80070570问题,提供了详细的CHKDSK修复方法。通过5分钟核心修复流程,指导用户使用系统自带工具快速修复文件系统逻辑错误,恢复硬盘访问。文章还深入解析了CHKDSK参数,并提供了备选数据恢复方案与日常防护建议。

app77的博客 235

【RabbitMQ】异步任务

一、前言     上一篇博客介绍了用线程池实现异步任务。这一篇博客谈一谈用MQ实现异步任务。MQ的产品有灰常多,像什么MSMQ、activeMQ、RocketMQ、RabbitMQ、kafak等。在此之前先谈一谈对消息队列的理解。二、MQ       MQ是一种应用程序对应用程序的通讯方法,应用程序通过读写出入队列的消息来进行通信,两者无需建立连接,发布者和消费者无需知道对方的存在。      M...

柠檬树 4164

2023年数学建模国赛三大赛题核心建模思路与实战代码全解

本文全面解析2023年数学建模国赛三大赛题的核心建模思路与实战代码,涵盖塔式太阳能光热发电系统优化、多波束测深系统动态规划及蔬菜商品化策略建模。通过Python代码示例和优化算法(如遗传算法、NSGA2)展示,帮助参赛者掌握数学建模的关键技术与实战技巧,提升竞赛成绩。

weixin_33713350的博客 336

【实用篇】RabbitMQ

基本消息队列的消息发送流程:建立connection创建channel利用channel声明队列利用channel向队列发送消息基本消息队列的消息接收流程:建立connection创建channel利用channel声明队列定义consumer的消费行为handleDelivery()利用channel将消费者与队列绑定多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量交换机的作用是什么?接收publisher发送的消息。

博客包含书籍、B站、其他博主博客等内容,只为了记录笔记,作业,问题,软件配置等,为了以后方便查阅,如有侵权,请联系删除 595

解决/usr/lib64/libstdc++.so.6和/lib64/libc.so.6版本过低问题

在CentOS7.0中编译好MySQL5.7.14之后,然后在CentOS6.5中初始化MySQL,执行:/usr/local/mysql/bin/mysqld --version出现如下问题:./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./bin/mysqld)

poxiaonie的博客 2万+

creo二次开发使用映射

在creo进行二次开发时,一些无法直接通过访问底层代码来对特征进行操作,比如“镜像装配”,这个时候就可以使用映射(Mapkey)来完成一键镜像。 注:这是镜像装配的代码 ProError status; ProMacro macro; wstring Macro; strMacro = L"mapkey(continued) ~ Command ProCmdMirrorAssem ; mapkey(continued) ~ Activate mirror_component_dialog Sy

qq_49328512的博客 1647

RabbitMQ快速入门,5个MQ的Demo示例

RabbitMQ快速入门,5个MQ的Demo示例

qq_44760653的博客 5114

Solidworks钣金设计:折弯系数、K因子与折弯扣除的实战应用解析

本文深入解析Solidworks钣金设计中折弯系数、K因子与折弯扣除的核心概念与实战应用。通过厘清三者间的逻辑关系与换算方法,并结合材料特性、工艺参数及车间实测,指导工程师精准确定展开长度,确保设计图纸与加工实物的一致性,有效提升钣金件设计精度与生产效率。

weixin_29268267的博客 924

RabbitMQ 入门指南:安装、基础结构、消息模型与入门案例

本篇文章,我们将一步步指导如何在 CentOS 系统上安装 RabbitMQ ,这是基于 Erlang 语言开发的强大开源消息中间件。我们会从下载和安装开始,然后深入到 RabbitMQ 的核心概念,包括通道、交换机、队列和虚拟主机。此外,我们还会通过简单的入门案例,展示如何在 RabbitMQ 中发送和接收消息。涉及到代码的部分 , 我们已经提供给大家 demo 版本 , 下载之后按照教程模拟即可 .

m0_53117341的博客 1621

解锁Vscode:C/C++环境配置超详细指南

本文详细介绍如何在 VSCode 中配置 C/C++ 开发环境,帮助开发者快速搭建高效的编码调试环境。内容涵盖前期准备、软件下载安装、环境变量配置、工作区文件设置及测试运行全流程:首先需准备 VSCode 编辑器、MinGW-w64 编译器及 C/C++ 插件;接着完成工具下载与安装,配置系统环境变量以确保编译器可全局调用;然后通过创建.vscode工作区文件夹,配置核心文件,实现代码智能提示与调试功能;最后通过编写 Hello World 示例验证环境可用性,并附上常见问题排查方案。

邓邓子的博客 3047

n8n AI高效工作流自动化 部署使用教程

摘要: n8n是一款开源可视化工作流自动化工具,结合AI能力可高效解决重复性任务。文章详细介绍了从Docker部署到实战应用的完整流程:1)通过Docker Compose自托管n8n,确保数据可控;2)以AI客服日报机器人为例,演示如何串联工单系统、ChatGPT和邮件通知,实现定时自动化;3)进阶搭建交互式AI助手,利用ToolsAgent节点调用业务API;4)整合向量数据库构建RAG知识库问答。关键建议包括:拆分复杂工作流、严格管理凭据、区分开发与生产环境,并建议从高频刚性需求(如日报生成)切入,逐

专注AI大模型,软件混淆,授权 267

RabbitMQ入门demo

文章目录RabbitMQ入门demo1 原生代码2 重点掌握Springboot写法3 Springboot rabbitMQ传递对象 RabbitMQ入门demo 1 原生代码 创建新模块 引入依赖:spring-boot-starter-amqp 生产者代码 public class ProducerTest { // 交换机名字 private String excha...

weixin_45044097的博客 550

AHB—SRAMC项目(结构图,核心代码、Testbench架构)

文章目录一、AHB_SRAMC项目介绍1.1.AHB总线控制单元(ahb_slv_if.v)1.2.SRAM控制单元(sramc_top.v)1.3.主要的传输路径二、结构框图2.1.AHB_SRAMC结构图(重点)2.2.总线控制单元与SRAM控制单元结构图三、部分核心代码(重点理解)四、SystemVerilog Testbench架构(重点)五、目录结构 一、AHB_SRAMC项目介绍 本项...

Mr.翟的博客 3万+

RabbitMQ Demo 项目教程

RabbitMQ Demo 项目教程 1. 项目介绍 RabbitMQ Demo 项目是一个基于 RabbitMQ 消息队列的开源示例项目,旨在帮助开发者快速理解和掌握 RabbitMQ 的基本使用和高级功能。该项目包含了多个示例代码,涵盖了消息的生产、消费、路由、交换机配置、队列管理等核心功能。通过这些示例,开发者可以深入了解 RabbitMQ 的工作原理和最佳实践。 2. 项目快速启动 2.1...

gitblog_00739的博客 1137

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

RabbitMQ(Java快速入门附Demo代码)

生产者通过交换机发送消息。交换机根据路由规则将消息分发到队列。消费者从队列中接收并处理消息。这个 Demo 不仅通过代码实现了消息传递,还借助逻辑图和类比帮助您更直观地理解 RabbitMQ 的机制。希望这对您掌握 RabbitMQ 有所帮助!

m0_73889530的博客 1420

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RabbitMQ快速入门Java Demo

RabbitMQ快速入门Demo快速入门Demodirect:fanout 快速入门Demo 引入依赖(版本自选): <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --> <dependency> <groupId>com.rabbitmq</groupId> &...

Jews 2136

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

RabbitMQ基础快速入门和代码demo

一、MQ的基本概念 1、MQ概述 2、MQ优势 1、应用解耦 2、异步提速 3、削峰填谷 优势小结 3、MQ劣势 4、常见的MQ产品 5、RabbitMQ简介 2007年,Rabbit 技术公司基于 AMQP 标准开发的 RabbitMQ 1.0 发布。RabbitMQ 采用 Erlang 语言开发。Erlang 语言由 Ericson 设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。 RabbitMQ 基础架构如下图 6、MQ中的相关概念介绍 Broker:接

沮丧的南瓜 750

RabbitMQ基础入门

建立connection创建channel利用channel声明队列利用channel向队列发送消息建立connection创建channel利用channel声明队列定义consumer的消费行为handleDelivery()利用channel将消费者与队列绑定多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量交换机的作用是什么?接收publisher发送的消息将消息按照规则路由到与之绑定的队列。

weixin_44320429的博客 1259

消息队列RabbitMQ基础详解以及入门Demo

文章目录1 为什么要使用RabbitMQ1.1 RabbitMQ基础1.2 同步变异步1.2.1 逐一流程1.2.2 线程池1.2.3 用MQ系统1.3 解耦合服务1.4 流量削锋2 消息队列基础知识2.1 Provider2.2 Consumer2.3 没有使用消息队列时消息传递方式2.4 使用消息队列后消息传递方式2.5 什么是队列2.6 队列里存储了什么2.7 队列和应用程序的关系 1 为什...

上善若泪 1226

RabbitMQ理解及入门使用(附详细示例demo)

1. RabbitMQ概述 RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。 AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。 1.1消息模型 所有 MQ 产品从模型抽象上来说都是一样的过程: 消费者(consum...

weixin_42956626的博客 1043

RabbitMQ快速入门案例

官网地址:https://www.rabbitmq.com/安装RabbitMQ,可以参考我的另一篇博客:https://yangyongli.blog.youkuaiyun.com/article/details/125764244MQ的基本结构如下图所示: RabbitMQ中的一些角色:RabbitMQ官方提供了5个不同的Demo示例,对应了不同的消息模型:官网学习地址如下:https://www.rabbitmq.com/tutorials/tutorial-one-python.html1、简单模式简单模式:

流楚丶格念的博客 1922
上一篇: 使用apache 的FileUtils处理文件的复制等操作方式
下一篇: docker安装Elasticsearch、Kibana,ik分词器
Arbitrary.`
博客等级 码龄8年 9801粉丝 35原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值