RabbitMQ快速入门,这一篇看完教你学会

2023-05-16

RabbitMQ快速入门

今天学习RabbitMQ,你知道RabbitMQ是什么吗,RabbitMQ是一种消息中间件,我们在写很多业务的时候,有时候我们需要考虑到消息的实时性,时效性和一致性,比如说我们最熟悉的订单业务,一个订单从下单到订单到库存发货都是有实时性的,如果中间取消订单我们还要保持一致性,不能前面下订单了后面取消了给人发货了吧,但是如果用普通的java代码来做,那肯定很麻烦,解决麻烦的途径就是找一个好用的框架,那今天我们就一起来学习下RabbitMQ这个框架。

docker下载安装

这里我看的教程是因为Rabbitmq是基于Erlang环境,先安装Erlang然后再安装Rabbitmq就很麻烦,说是docker比较方便,那我们就用docker嘛

这里还不会docker的可以看下,一文教会你docker:https://blog.csdn.net/hello_list/article/details/124221409

如果不会linux,一文教会:https://blog.csdn.net/hello_list/article/details/123977208

很简单只需要一行代码,搞定

docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq -v /mydata/rabbitmq/data:/mydata/rabbitmq/data rabbitmq
  • -d:后台启动
  • -p:容器内外端口映射
  • -v:容器内外文件目录挂载
  • –name:指定生成容器名称

在这里插入图片描述

容器创建完毕,同时也在本地跑起来了;我们可以去访问web界面

访问失败
在这里插入图片描述

应该是我这个防火墙端口号没有打开,把防火墙直接关了

systemctl stop firewalld
systemctl disable firewalld

还是访问不了,然后我去查了下好像这个不带web界面,到了官方这里,官方地址:https://www.rabbitmq.com/download.html

在这里插入图片描述

换一下,换了一个镜像,把之前的删除了重新创建容器

docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root -v /mydata/rabbitmq/data:/mydata/rabbitmq/data rabbitmq:3.10-management

访问测试成功

在这里插入图片描述

rootroot登录,访问成功

在这里插入图片描述

接下来我们学习,就可以通过这个web界面进行操作,包括查看与代码结合使用;

GetStart

安装好之后我们就开始学习

官网:https://www.rabbitmq.com/,好多兔子

在这里插入图片描述

来到GetStarted我们看到Rabbitmq支持7中模式,比如我们要学习什么,java我们点进去学习就可以,你学习别的语言python都可以直接去官方看着学就可以,很方便,而且一定错不了,还是最新的;

在这里插入图片描述

Simple Queues

我们点进去java看下简单模式,看官网说明看的懂哈,一个producter然后发送消息进入消息队列,然后被consumer进行消费;

“P” is our producer and “C” is our consumer.

在这里插入图片描述

话不多说,代码好懂,我们写一个简单例子出来

环境说明:jdk1.8,idea2019

1、创建一个普通的maven工程

这里就不用说怎么创建了吧

在这里插入图片描述

2、导入依赖,java原生依赖,一定要检查依赖导入成功

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.10.0</version>
</dependency>

3、创建一个生产者提供服务,这里是给自己深化理解的,参考:https://www.kuangstudy.com/zl/rabbitmq#1366709584634437634

public class Producer {
    public static void main(String[] args) {
        // 1: 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 2: 设置连接属性
        connectionFactory.setHost("192.168.43.12");
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/");
        connectionFactory.setUsername("root");
        connectionFactory.setPassword("root");
        Connection connection = null;
        Channel channel = null;
        try {
            // 3: 从连接工厂中获取连接
            connection = connectionFactory.newConnection("生产者");
            // 4: 从连接中获取通道channel
            channel = connection.createChannel();
            // 5: 申明队列queue存储消息
            /*
             *  如果队列不存在,则会创建
             *  Rabbitmq不允许创建两个相同的队列名称,否则会报错。
             *
             *  @params1: queue 队列的名称
             *  @params2: durable 队列是否持久化
             *  @params3: exclusive 是否排他,即是否私有的,如果为true,会对当前队列加锁,其他的通道不能访问,并且连接自动关闭
             *  @params4: autoDelete 是否自动删除,当最后一个消费者断开连接之后是否自动删除消息。
             *  @params5: arguments 可以设置队列附加参数,设置队列的有效期,消息的最大长度,队列的消息生命周期等等。
             * */
            channel.queueDeclare("queue1", false, false, false, null);
            // 6: 准备发送消息的内容
            String message = "你好,学相伴!!!";
            // 7: 发送消息给中间件rabbitmq-server
            // @params1: 交换机exchange
            // @params2: 队列名称/routing
            // @params3: 属性配置
            // @params4: 发送消息的内容
            channel.basicPublish("", "queue1", null, message.getBytes());
            System.out.println("消息发送成功!");
        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("发送消息出现异常...");
        } finally {
            // 7: 释放连接关闭通道
            if (channel != null && channel.isOpen()) {
                try {
                    channel.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
}

4、创建一个消费者消费服务

public class Consumer {
    public static void main(String[] args) {
        // 1: 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 2: 设置连接属性
        connectionFactory.setHost("192.168.43.12");
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/");
        connectionFactory.setUsername("root");
        connectionFactory.setPassword("root");
        //获取队列的名称
        final String queueName = Thread.currentThread().getName();
        Connection connection = null;
        Channel channel = null;
        try {
            // 3: 从连接工厂中获取连接
            connection = connectionFactory.newConnection("生产者");
            // 4: 从连接中获取通道channel
            channel = connection.createChannel();
            // 5: 申明队列queue存储消息
            /*
             *  如果队列不存在,则会创建
             *  Rabbitmq不允许创建两个相同的队列名称,否则会报错。
             *
             *  @params1: queue 队列的名称
             *  @params2: durable 队列是否持久化
             *  @params3: exclusive 是否排他,即是否私有的,如果为true,会对当前队列加锁,其他的通道不能访问,并且连接自动关闭
             *  @params4: autoDelete 是否自动删除,当最后一个消费者断开连接之后是否自动删除消息。
             *  @params5: arguments 可以设置队列附加参数,设置队列的有效期,消息的最大长度,队列的消息生命周期等等。
             * */
            // 这里如果queue已经被创建过一次了,可以不需要定义
            //channel.queueDeclare("queue1", false, false, false, null);
            // 6: 定义接受消息的回调
            Channel finalChannel = channel;
            finalChannel.basicConsume("queue1", true, new DeliverCallback() {
                @Override
                public void handle(String s, Delivery delivery) throws IOException {
                    System.out.println(queueName + ":收到消息是:" + new String(delivery.getBody(), "UTF-8"));
                }
            }, new CancelCallback() {
                @Override
                public void handle(String s) throws IOException {
                }
            });
            System.out.println(queueName + ":开始接受消息");
            System.in.read();
        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("接收消息出现异常...");
        } finally {
            // 7: 释放连接关闭通道
            if (channel != null && channel.isOpen()) {
                try {
                    channel.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
            if (connection != null && connection.isOpen()) {
                try {
                    connection.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
}

测试

运行生产者生产消息,消息发送成功:

在这里插入图片描述

我们在图形化界面上直接看到有一条消息产生:

在这里插入图片描述

web界面可以接收消息,这里大家看,这里有一个nack和一个ack,nack可以预览小,模拟接收消息,但是不会真的消费了这个消息,而ack就是消费消息,消费了就是没有了,这里大家可以用nack预览消息,但是切记不要手动消费消息,不然消息就没有了

在这里插入图片描述

我们可以使用nack预览消息,成功接收消息,同时消息是还在队列里面:

在这里插入图片描述

我们还可以看看web图形化界面如何操作,大家在使用的时候可以结合web图形化界面使用,很方便;

接下来我们使用程序来接收消息:

在这里插入图片描述

大家注意一个细节啊,生产完发送消息,程序就会停止了,但是接收消息,我们接收到消息,程序并没有停止,所以当我们对一个队列进行消息接受的时候,除非程序停止,不然一直会消费和接收队列中的消息,而生产者只负责生产发送出去消息就会立即停止;

Work Queues

官网文档:https://www.rabbitmq.com/tutorials/tutorial-two-java.html

刚才我们学习了点对点,生产者消费者在一个队列中生成发布消息和消费消息,那多个消费者,我们也是有两个机制的

在这里插入图片描述

轮询分发(默认)

  • 这里代码同上,多发几条消息,多开几个消费者就可以去try一下

公平分发

  • 消费机制,改成手动应答,这样就可以实现公平分发,谁消费处理的块,消息就能更快的到谁那里

消费者修改下代码即可,改成手动应答:

Manual message acknowledgments are turned on by default. In previous examples we explicitly turned them off via the autoAck=true flag. It's time to set this flag to false and send a proper acknowledgment from the worker, once we're done with a task.

channel.basicQos(1); // accept only one unack-ed message at a time (see below)

DeliverCallback deliverCallback = (consumerTag, delivery) -> {
  String message = new String(delivery.getBody(), "UTF-8");

  System.out.println(" [x] Received '" + message + "'");
  try {
    doWork(message);
  } finally {
    System.out.println(" [x] Done");
    channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
  }
};
boolean autoAck = false;
channel.basicConsume(TASK_QUEUE_NAME, autoAck, deliverCallback, consumerTag -> { });

Direct模式-发布订阅模式

我们接下来学习下交换机的四种模式,交换机具有消息发布的功能

大家不要看这几个模式什么的,不要太复杂,等看完你就知道差别不大,我们通过这张图可以看一下,他其实就是加了一个路由,我们可以指定路由进行消息的发送到不同的队列,由不用的消费者消费;

在这里插入图片描述

程序代码也不会有太大变化啊

生产者

我们通过web界面去创建一个direct模式的交换机,交换机,就是上图中的那个x我们只需要给指定交换机中发送消息,然后交换机通过路由分发到不同的队列,不用想想太复杂,一听名字交换机就认为很难一样,就想刚才我们使用simple就没有用到交换机,不是没有用到,是我们直接用的默认交换机,default就是;

在这里插入图片描述

在这里插入图片描述

然后我们创建几个队列,分别指定不用的路由key,也是直接在命令行这里创建吧

在这里插入图片描述

添加队列

在这里插入图片描述

点进创建的队列,然后我们可以给这个队列绑定上我们创建的交换机

在这里插入图片描述

这样我们就创建了三个队列,然后都绑定到了这个交换机,相信大家一看就知道这是干什么,这是当我们有个消息过来,我们要发给微信还是qq还是邮件

在这里插入图片描述

现在我们给交换机推送一条信息,那这条消息呢我们就通知到微信

在这里插入图片描述

这样我们就看到微信的队列就多出了一条消息

在这里插入图片描述

我们可以预览下这条消息,就是我们发的

在这里插入图片描述

这里我就不上代码了吧,其实这些都很简单的,官网上有代码,看官网上代码吧,其实就跟之前的代码一样呀,就是创建了一个交换机和队列指定了下路由key,主要就是加上这几个代码吧,官网:https://www.rabbitmq.com/tutorials/tutorial-three-java.html

channel.exchangeDeclare("logs", "fanout");  // 创建一个交换机,param1 交换机name,param2交换机模式
String queueName = channel.queueDeclare().getQueue(); // 创建队列
channel.queueBind(queueName, "logs", "");   // 交换机与队列绑定

上面创建交换机或者队列,如果存在再创建就回报错的,就这些大家自己去尝试好了;

其实都是一次性的,比如创建和绑定我们是可以通过web界面这样操作的,很方便,不然你写这个创建的代码也是一次性的嘛!

Topics模式

其实就是在direct模式上添加了模糊匹配

.*   // 表示一个单词
.#   // 表示没有单词或者一个或多个单词

在交换机是direct模式中呢,也就是刚才我们发现,想要跟微信,qq队列推送消息,相当于要个交换机push两条消息,指定路由key分别为微信和qq,是不是感觉有点儿不足呢,我们不能达到一次推送多个分发的效果呀,这个时候我们就可以用Topics模式,带着这个任务,我们去修改下,使用Topics模式;

首先肯定是先创建交换机了

在这里插入图片描述

我们重新绑定刚才的三个队列,指定上路由key,这里我就不在创建三个队列了,我们还是拿这三个队列try下

在这里插入图片描述

这样我们就绑定玩关系了,那#和*分别是什么意思,刚开始就有说,那我为什么这么写呢,我这里有一个需求,邮件不能单独发,也就是你可以单独发qq或者单独发微信,但是你如果要发邮件的话,必须是发了qq或者微信,就这样。

在这里插入图片描述

我们试下,比如我们给qq和微信发消息

在这里插入图片描述

可以看到qq和微信都收到了消息

在这里插入图片描述

你也可以尝试下单独给qq发,单独给微信发,这里我尝试下单独给email发,看到了吧,失败了

在这里插入图片描述

那我们要想发邮件就必须带上qq或者微信,尝试下

在这里插入图片描述

需求实现,完成

在这里插入图片描述

代码呢,还是自己去看下吧,都一样,大差不差几行代码,官方文档:https://www.rabbitmq.com/tutorials/tutorial-five-java.html

fanout模式

其实基本上所有课程都是首先讲fanout模式,然后层层带入,fanout模式最简单,创建出一个fanout交换机,绑定上几个队列,交换机发送消息的时候,绑定的多个队列就都会收到消息,是不是很简单,我们就是要把难点儿的放在前面讲嘛,这样不就很简单了;

headers模式

headers模式几乎不怎么用,其实就是,看到下面的参数了嘛,交换机发送消息的时候,参数对应上就可以,没得讲,而且我听说几乎不怎么用,所以,基本差不多;

在这里插入图片描述

小结

今天先到这里,学习一下基本的消息收发,那后面呢我们就可以简化,跟springboot整合,我们知道什么跟springboot整合之后就回简单许多,那这里的全部大家都要去实现一下,然后我们后面再学习比如如何结合业务逻辑,结合订单模块等等,那看到这里了好不点个赞,点个关注嘛,bye~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RabbitMQ快速入门,这一篇看完教你学会 的相关文章

  • QT 秒/毫秒 转 时分秒

    在日常开发时 xff0c 经常会遇到计算剩余进度或者剩余时间的问题 xff0c 比如计算剩余下载时间等等 本篇文章旨在提供几个常用的转换方式供各位参考 1 秒转时分秒 xff08 方法壹 xff09 QString span class t
  • QT 如何实现 半透明的 圆角 矩形 窗口

    在日常使用的软件里面 xff0c 有些软件提示用户时 xff0c 经常会发现有些提示窗口是半透明的 那么如何实现一个可拖动的 半透明 圆角矩形窗口呢 xff1f 整体思路 xff1a 将窗口本身设置为透明 xff0c 然后通过qss或者绘图
  • 小哥质疑谷歌顶会CV论文有错!并且拿出了复现代码来证明

    点击上方 CVer xff0c 选择加 34 星标 34 置顶 重磅干货 xff0c 第一时间送达 萧箫 发自 凹非寺 来源 xff1a 量子位 xff08 QbitAI xff09 景色很好看 xff0c 可是手机相机分辨率太低 xff0
  • QT 如何只允许打开一个 chm 文档

    chm文档 xff0c 大家都不会陌生 xff0c 很多软件的帮助文档就是chm格式的 我们自己在开发程序的时候 xff0c 也需要对外提供帮助文档 xff0c 为了方便用户 xff0c 经常在软件中就可以打开帮助文档 xff0c 那么如何
  • QT 如何把外部程序嵌入到QT界面

    一个奇怪但又合乎现实需要的需求 xff0c 就是把外部程序嵌入到本窗口内 xff0c 实现外部程序在本窗口的显示 可能外部程序是由其他人开发的 xff0c 但是想 拿来 作为内部使用 xff0c 于是乎想把外部程序嵌入到本程序窗口内 xff
  • QT 如何去除QListView选中item后的虚线框

    在使用QListView或者QListWidget时 xff0c 如果选中其item xff0c 会发现边框会出现虚线框 xff0c 这并不美观 xff01 所以 xff0c 我们需要去掉选中后的虚线框 在查阅各路大神的实现方式后 xff0
  • QT QCompleter 用法小结

    1 有何用处 QCompleter类提供基于项模型的补全功能 您可以使用QCompleter在任何Qt小部件 xff08 如QLineEdit和QComboBox xff09 中提供自动补全 当用户开始键入单词时 xff0c QComple
  • QT 关于全屏 与 退出全屏

    在某些场景 xff08 比如说 xff1a 车机系统 医疗仪器等 xff09 可能需要确保软件的全屏显示 xff0c 本次探讨的是如何实现全屏与退出全屏 实现全屏的几种方式 span class token operator lt span
  • QT 如何设置 QCompleter 样式

    在使用QCompleter xff0c 一般都会面临两个问题 xff1a 1 如何设置Completer的行高 xff1b 2 如何设置Completer的样式 本文将一次为你解答 xff0c 顺便讲讲ComboBox设置Completer
  • QT 如何知道用户点击 QTextBrowser 中的具体链接地址

    在通过鼠标点击 QTextBrowser 中的链接地址时 xff0c 如果是希望使用外部浏览器打开链接地址 xff0c 只需要添加一行代码 ui gt textBrowser gt setOpenExternalLinks true 但如果
  • QT 常用控件类型命名参考

    规范的定义 规范 xff0c 有名词 动词 代词等词性 意指符合逻辑 xff0c 客观 真实 全面 完整 准确 及时 xff0c 达标 明文规定或约定俗成的标准 如 xff1a 道德规范 技术规范等 或是指按照既定标准 规范的要求进行操作
  • C++ 如何让代码在main()函数之前或者之后执行

    程序最早执行的函数其实并不是main xff0c 在main函数之前会有一系列初始化的操作 xff08 通常是由链接器等完成的 xff09 比如在windows中 xff0c 这个函数是mainCRTStartup xff0c 这个函数是链
  • QT 如何提高 Qt Creator 的编译速度

    如何提高编译速度 xff0c 貌似是一个老生常谈的话题 对于Qter而言 xff0c 如何提高QT Creator 的编辑速度是一直都是大家所期盼的 本文也是查阅了各路大神的方法后整理出来的 xff0c 希望对各位有所帮助 1 在 pro文
  • 卧槽!出了一个Python实时目标跟踪系统神器!

    在当下自动驾驶 智慧城市 安防等领域对车辆 行人 飞行器等快速移动的物体进行实时跟踪及分析的需求可谓比比皆是 xff0c 但单纯的目标检测算法只能输出目标的定位 43 分类 xff0c 无法对移动的目标具体的运动行为及特征进行分析 xff0
  • C++ 什么是BCC校验

    BCC Block Check Character xff0c 俗称异或校验 BCC的实现方法 xff1a 将所有数据都和一个指定的初始值 通常是0 异或一次 xff0c 所得结果为校验值 BCC一般只是用来排错的 xff0c 并不是加密算
  • QT 如何让QLineEdit的文字从最左边开始显示

    当QLineEdit的文字长度超过了控件宽度 xff0c 一般而言 xff08 控件文字设为靠左对齐 xff09 xff0c 用户只能看到这一长串文字的后半段部分 但是如果想让QLineEdit从最左边开始显示字符串内容呢 xff1f 举个
  • QT setBuddy 用法小结

    将此标签的好友 xff08 窗口其他小部件 xff09 设置为好友 当用户按下此标签指示的快捷键时 xff0c 键盘焦点将转移到标签的好友小部件 好友机制仅适用于包含一个字符前缀为 amp 的文本的QLabels 此字符被设置为快捷键 设置
  • QT stackUnder 用法小结

    stackUnder是什么意思 xff1f 根据官方的解析 xff0c 简而言之一句话 xff1a 把窗口的小部件放置于父窗口的堆栈窗口中 本文将通过一则简单的示例 xff0c 来具体解析stackUnder该如何使用 官方解析 void
  • QT 线程安全的单例模式(使用Q_GLOBAL_STATIC实现)

    Qt提供了宏 Q GLOBAL STATIC xff08 官方说明文档 xff1a https doc qt io qt 5 qglobalstatic html xff09 xff0c 用于创建全局静态对象 鉴于此 xff0c 我们可以通
  • git push提示“fatal: the remote end hung up unexpectedly”的解决方法

    问题描述 在执行push命令时 xff0c 命令行提示 xff1a span class token function git span push origin master Enumerating objects 4968 done Co

随机推荐

  • 四旋翼无人机动力学模型及控制

    四旋翼无人机动力学模型及控制 I 欧拉角与旋转矩阵 Overview欧拉角与旋转矩阵Body Frame Angular Velocity and
  • Urbannav数据集/novatel_data/inspvax订阅

    使用Urbannav数据集做多原融合定位评估精度 xff0c 需要使用 novatel data inspvax作为真值 xff0c 但无法直接订阅该话题 rotopic echo novatel data inspvax 显示无法订阅 x
  • 软路由硬件, 研究了一圈还是J1900 , i211网卡又如何

    软路由的心路历程还真是纠结 xff0c 现写出来供大家参考 需求上也是几经翻车 xff1a 路由 xff0c NAS 之类的一体机是最先迸发出来也是最先被否的 本着大道至简 xff0c 设备专用的原则 软路由即路由 xff0c 不做他用 功
  • putty远程连接ubuntu18失败处理方法

    putty客户端远程连接报错 xff1a Network error Connection refused 解决方法 xff1a 1 先在Windows系统cmd命令下ping下此ip地址连接是否正常 xff0c 如果连接正常说明主机没有问
  • KITTI榜单新SOTA!相机-LiDAR双向融合新范式 | CVPR 2022 Oral & arXiv 2023

    点击下方卡片 xff0c 关注 CVer 公众号 AI CV重磅干货 xff0c 第一时间送达 点击进入 gt 计算机视觉 微信技术交流群 作者 xff1a 王利民 xff08 已授权转载 xff09 编辑 xff1a CVer https
  • C++ Primer 学习笔记 第七章 类

    233 定义类 span class token macro property span class token directive hash span span class token directive keyword include
  • 如何编写CMakeLists

    Preface 构建一个工程的时候 xff0c CMake需要知道的几个点 xff08 如果下面几件事你知道怎么做了 xff0c 多大的工程就都不是问题了 A 源代码在哪里 xff1f B 头文件在哪里 xff1f C 怎么生成静态或者动态
  • 【算法】最快最简单的排序——桶排序

    在我们生活的这个世界中到处都是被排序过的 站队的时候会按照身高排序 xff0c 考试的名次需要按照分数排序 xff0c 网上购物的时候会按照价格排序 xff0c 电子邮箱中的邮件按照时间排序 总之很多东西都需要排序 xff0c 可以说排序是
  • TCP、UDP数据包大小的限制

    1 概述 首先要看TCP IP协议 xff0c 涉及到四层 xff1a 链路层 xff0c 网络层 xff0c 传输层 xff0c 应用层 其中以太网 xff08 Ethernet xff09 的数据帧在链路层 IP包在网络层 TCP或UD
  • Jetson TX2刷机教程

    介绍 xff1a 本文介绍如何对Jetson TX2进行刷机 xff0c 系统版本为Jetpack4 6 0 准备 xff1a 主机 xff08 虚拟机 xff09 xff1a Ubuntu18 04Jetson TX2USB 连接线 刷机
  • 研扬Jetson NX镜像备份和恢复

    0 环境依赖 研扬RC S ARES 200AI NX CSC00型号Jetpack4 6 0 1 如何进入Recovery模式 1 先按住Recovery键再插电源上电 xff0c 此间一直按住Recovery键2 3秒之后松开 2 将U
  • SpringCloud-Eureka快速入门,集群搭建

    Eureka 个人主页 xff1a https blog csdn net hello list type 61 blog 前言 第一章 xff1a SpringCloud环境搭建 Rest使用 这里博主从说更新springcloud xf
  • SpringCloud-Ribbon和Feign快速上手

    Ribbon 个人中心 xff1a https blog csdn net hello list 前情提要 xff1a SpringCloud环境搭建 Rest使用SpringCloud Eureka快速入门 xff0c 集群搭建 首先我们
  • Java IO流详解

    Java IO流详解 个人主页 xff1a https blog csdn net hello list 今天我们来学习下java中的io部分 首先我们要知道io指的是什么 xff0c 输入输出 xff0c 就是输入输出流 xff0c 我们
  • SpringCloud-Hystrix服务熔断,快速入门

    Hystrix服务熔断 个人中心 xff1a 学习日记的博客 前情提要 xff1a SpringCloud环境搭建 Rest使用SpringCloud Eureka快速入门 xff0c 集群搭建SpringCloud Ribbon和Feig
  • 最新!!Intel首发UP SQUARED* GROVE物联网开发套件

    xfeff Intel官方网站正式推出UP SQUARED GROVE 物联网开发套件 https software intel com zh cn iot hardware up squared grove dev kit UP Squa
  • 再探指针:指针有什么用?(课堂笔记,来自翁恺老师的C语言进阶课,有着个人理解)

    指针的用处 xff1a 三个比较常用的场景 我们希望函数可以返回多个值的时候 我们都知道函数只可以return一个值 xff0c 使用指针便可以在一个函数里面返回多个值 举例 xff1a swap函数和数组中寻找最大值最小值的函数 xff0
  • java反射与注解详解,共同实现动态代理模式

    java反射与注解详解 xff0c 共同实现动态代理模式 个人主页 xff1a https blog csdn net hello list id xff1a 学习日记 不知不觉一年过去了 xff0c 整整一年 xff0c 这一年写了60多
  • 微信小程序快速入门

    微信小程序快速入门 在这里首先祝大家国庆节快乐 xff0c 其实原本文章都没有准备好 xff0c 也没有打算更文的 xff0c 那还是将就一下吧 xff0c 发个简单的 前言 相信大家对微信小程序并不陌生 xff0c 以前我们接触网络刚开始
  • RabbitMQ快速入门,这一篇看完教你学会

    RabbitMQ快速入门 今天学习RabbitMQ xff0c 你知道RabbitMQ是什么吗 xff0c RabbitMQ是一种消息中间件 xff0c 我们在写很多业务的时候 xff0c 有时候我们需要考虑到消息的实时性 xff0c 时效