消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序

这篇具有很好参考价值的文章主要介绍了消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

基本概念 

MQ 的优势

 1.应用解耦

 2.异步提速

 3.削峰填谷

 MQ 的劣势

使用mq的条件

 常见MQ产品

 RabbitMQ简介

RabbitMQ的六种工作模式 

 JMS

RabbitMQ安装和配置。

RabbitMQ控制台使用。

RabbitMQ快速入门——生产者

需求:

RabbitMQ快速入门——消费者

小结 


基本概念 

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

多个系统之间的通信方式有两种,一是直接远程调用,二是通过第三方,mq就是这个第三方

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

MQ 的优势

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 1.应用解耦

一个好的系统肯定会要求高内聚低耦合。

像下面这个,订单系统发个订单到库存时,如果库存系统损坏了可能会连带影响订单系统。

有了mq之后,消息存放在mq里面,哪怕库存坏了几分钟,好了之后也可以从mq中接着拿消息出来。 

还有一个时,如果要添加一个新的x系统,一般要修改订单系统的代码来兼容。

有了mq之后,订单系统会把所有消息都放到mq里面,新的系统的不管是什么都从mq里面拿东西就好了,就不需要改代码了

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 2.异步提速

同步下需要走完整个流程才能有反馈,所以很慢。

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

异步下,即使没有运行完整个流程,也会立刻返回消息,后面的系统会继续从mq中取出消息执行。这种属于是骗人 

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 3.削峰填谷

瞬时请求太多致使服务器宕机了。

 消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 mq在这里只是缓存消息和发布消息,不负责业务逻辑处理,因此完全可以承载更多的请求。

如果一层mq解决不了,那就再加一层。

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java 使用mq技术在项目里面之后这些优势可以作为项目亮点写在简历上。

 MQ 的劣势

 消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

使用mq的条件

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 常见MQ产品

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 RabbitMQ简介

RabbitMQ支持AMQP协议,

在AMQP中,交换机分发消息,queue存储消息。分发通过Routes进行 。

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

RabbitMq里面RabbitMQ Server作为服务端,生产者和消费者都是作为客户端,通过tcp连接和服务端进行通信。如果每一次通信都建立tcp连接资源消耗极大,故这里Connection作为一个连接池,里面有许多管道,通过channel进行通信,这样可以节约资源。

 RabbitMq中有很多虚拟机,每个虚拟机里面有很多Exchange和Queue,交换机可以绑定到不同的队列上,Binding就是交换价绑定到队列上的过程。
消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

RabbitMQ的六种工作模式 

生产消息和消费消息的工作方式

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 JMS

类比jdbc是java程序和数据库通信的接口,JMS就是java程序和消息队列通信的接口。消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

RabbitMQ安装和配置。

在云服务器上直接安装docker版本的就可以了。

Downloading and Installing RabbitMQ — RabbitMQ

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management

运行如下所示

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

或者这样安装,这个就是后台运行,不会停机自动删除容器

docker run \
 -e RABBITMQ_DEFAULT_USER=itcast \
 -e RABBITMQ_DEFAULT_PASS=123321 \
 --name mq \
 --hostname mq1 \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3.12-management

 

安装好后通过IP+端口访问管理界面。

管理界面端口是15672,tcp连接的端口是5672。

账号密码都是guest消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java 

RabbitMQ控制台使用。

在控制台可以看见有一个Overview概览,Connection连接,channels通道,Exchanges交换机,Queues,和Admin,Admin中可以管理用户和虚拟机等 

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 这里新建了一个超级用户yhy和一个虚拟机itcast授权给yhy。

有了管理员权限就可以用新用户的账号密码登录了。

RabbitMQ快速入门——生产者

需求:

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

在idea中创建一个新的空工程,添加两个maven模块。 消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 然后再在两个工程里面分别导入rabbitMQ的依赖和编译的版本插件。

 <dependencies>
         <!--rabbitmq的java客户端-->
         <dependency>
             <groupId>com.rabbitmq</groupId>
             <artifactId>amqp-client</artifactId>
             <version>5.6.0</version>
         </dependency>
     </dependencies>

    <build>
        <plugins>
            <!--编译插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java  

有基本架构图和简单工作模式的图可得以下流程。因为简单模式中没有交换机,所以这里不涉及交换机的创建。

//发送消息
public class producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //1.创建连接工厂
        ConnectionFactory factory=new ConnectionFactory();
        //2.设置参数
        factory.setHost("XXX.XX.XXX.XXX"); //设置ip地址。默认为127.0.0.1
        factory.setPort(5672);              //端口 默认值5672
        factory.setVirtualHost("/itcast");  //设置虚拟机 默认值/
        factory.setUsername("yhy");        //用户名,默认值guest
        factory.setPassword("XXXXXX");     //密码,默认值guest
        //3.创建连接Connection
        Connection connection = factory.newConnection();
        //4.创建Channel
        Channel channel = connection.createChannel();
        //5.创建队列Queue
        /*
        queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
        参数:
            1.queue:队列名称
            2.durable:是否持久化,当mq重启之后,还在
            3.exclusive:
                *是否独占。只能有一个消费者监听这队列
                *当Connection关闭时,是否删除队列
            4.autoDelete: 是否自动删除。当没有Consumer时,自动删除掉
            5.arguments:参数。
        */
        //如果没有一个名叫hello_yhy的队列,则会自动创建一个
        channel.queueDeclare("hello_yhy",true,false,false,null);
        //6.发送消息
        /*
        basicPublish(String exchange, String routingKey, AMQP.BasicProperties props, byte[] body)
        参数:
            1.exchange:交换机名称。简单模式下交换机会使用默认的""。
            2.routerKey:路由名称。
            3.props:配置信息
            4.body:发送消息数据
        */
        String body="hello rabbitmq!!!";
        channel.basicPublish("","hello_yhy",null,body.getBytes());
        //7.释放资源
        channel.close();
        connection.close();
    }
}

 在控制台中可以看见现在没有一个队列。

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 运行完之后可以看见hello_yhy队列出现了。

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 但是没有新的Connection和channel出现,因为最后关闭了,如果代码最后不关闭就会出现。

然后程序不同就会显示一直running。

 消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

 消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

RabbitMQ快速入门——消费者

与生产者非常类似。 

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

但是由上图可知,创建channel的参数虽然一样,但是是不同的channel.

在写生产者时已经有一个队列了,所以再创建一次也没有问题

目前队列中有两条消息。

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

public class consumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //1.创建连接工厂
        ConnectionFactory factory=new ConnectionFactory();
        //2.设置参数
        factory.setHost("XXX.XX.XXX.XXX"); //设置ip地址。默认为127.0.0.1
        factory.setPort(5672);              //端口 默认值5672
        factory.setVirtualHost("/itcast");  //设置虚拟机 默认值/
        factory.setUsername("yhy");        //用户名,默认值guest
        factory.setPassword("XXXXXX");     //密码,默认值guest
        //3.创建连接Connection
        Connection connection = factory.newConnection();
        //4.创建Channel
        Channel channel = connection.createChannel();
        //5.创建队列Queue
        /*
        queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
        参数:
            1.queue:队列名称
            2.durable:是否持久化,当mq重启之后,还在
            3.exclusive:
                *是否独占。只能有一个消费者监听这队列
                *当Connection关闭时,是否删除队列
            4.autoDelete: 是否自动删除。当没有Consumer时,自动删除掉
            5.arguments:参数。
        */
        //如果没有一个名叫hello_yhy的队列,则会自动创建一个
        channel.queueDeclare("hello_yhy",true,false,false,null);

        /*
        * basicConsume(String queue, boolean autoAck, Consumer callback)
        * 参数:
        *   1.队列名称
        *   2.autoAck:是否自动确认
        *   3.callback:回调对象
        * */
        //6.接收消息
        Consumer consumer=new DefaultConsumer(channel){
            /*
            * 回调方法,当收到消息后,会自动执行该方法
            * 1.consumerTag:标识
            * 2.envelope :获取一些信息,交换机,路由key...
            * 3.properties: 配置信息
            * 4.body: 数据
            * */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("consumerTag:"+consumerTag);
                System.out.println("Exchange:"+envelope.getExchange());
                System.out.println("RoutingKey:"+envelope.getRoutingKey());
                System.out.println("properties:"+properties);
                System.out.println("body:"+new String(body));
            }
        };
        channel.basicConsume("hello_yhy",true,consumer);

        //不需要关闭资源
    }
}

运行消费者代码之后

 可以看见雀氏取出了两条消息。并且控制台看见已经没有消息了。消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java

小结 

消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序,消息队列,spring boot,后端,java文章来源地址https://www.toymoban.com/news/detail-567281.html

到了这里,关于消息队列——RabbitMQ基本概念+容器化部署和简单工作模式程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 消息队列之RabbitMQ工作模式

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 消息队列之RabbitMQ工作模式 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 在这篇博客中,我将深入探讨 RabbitMQ 的工作模式,带你

    2024年01月18日
    浏览(52)
  • 消息队列——rabbitmq的不同工作模式

    目录 Work queues 工作队列模式  Pub/Sub 订阅模式 Routing路由模式 Topics通配符模式   工作模式总结 C1和C2属于竞争关系,一个消息只有一个消费者可以取到。  代码部分只需要用两个消费者进程监听同一个队里即可。 两个消费者呈现竞争关系。 用一个生产者推送10条消息 两个监

    2024年02月16日
    浏览(43)
  • 消息队列-RabbitMQ:workQueues—工作队列、消息应答机制、RabbitMQ 持久化、不公平分发(能者多劳)

    Work Queues— 工作队列 (又称任务队列) 的主要思想是避免立即执行资源密集型任务,而不得不等待它完成 。 我们把任务封装为消息并将其发送到队列,在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务 。 轮训分发消

    2024年02月21日
    浏览(53)
  • 消息队列RabbitMQ.01.基本使用

    目录  RabbitMQ的作用 Message queue 释义  问题思考  存在的问题 优化方案  案例分析  带来的好处  消息队列特点  Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ  3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查看日志 6.通过刚才

    2024年01月21日
    浏览(40)
  • Java RabbitMQ消息队列简单使用

    消息队列,即MQ,Message Queue。 消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。

    2024年02月12日
    浏览(58)
  • RabbitMQ基本概念和工作原理

    目录 RabbitMQ的基本概念 RabbitMQ的工作原理 RabbitMQ的交换机类型 RabbitMQ的实现原理 RabbitMQ的消息确认机制 RabbitMQ的消息持久化机制 RabbitMQ的事务 RabbitMQ的消息分发流程 RabbitMQ的消息分发机制 RabbitMQ实现RPC的机制 RabbitMQ是一个功能强大的开源消息队列中间件,具有许多基本概念。

    2024年02月09日
    浏览(46)
  • RabbitMQ的基本使用,进行实例案例的消息队列

    目录 一、介绍 1. 概述 2. 作用 3. 工作原理 二、RabbitMQ安装部署 1. 安装 2. 部署 3. 增加用户 三、实现案例 1. 项目创建 2. 项目配置 3. 生产者代码 4. 消费者代码 四、测试 每篇一获 RabbitMQ  是一种开源的消息代理和队列服务器,用于通过简单和可扩展的方式在分布式系统中传递

    2024年01月20日
    浏览(34)
  • RabbitMq基本概念以及5中工作队列(一)

    一、RabbitMQ 的概念         RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件。 Ra

    2024年02月03日
    浏览(47)
  • docker部署rabbitmq消息队列

    一、首先我们在dockerhub上搜索rabbitmq镜像 (下载版本我们可以通过指定,也可以通过直接搜过rabbitmq获取dockerhub上的最新版本,例如docker search rabbitmq) 二、搜索完成后,我们有了目标镜像版本,下一步就是通过dockerhub把镜像下载到本地,方便我们直接使用镜像时再去下载镜像

    2023年04月18日
    浏览(41)
  • RabbitMQ的基本概念和七种队列模式

    1. 生产者/消费者 生产者(Producer) 消息的创建者。 负责创建和推送数据到消息服务器。 消费者(Consumer) 消息的接收方。 负责接收消息和处理数据。 2. 消息队列(Queue) 消息队列是RabbitMQ的内部对象,用于存储生产者的消息直到发送给消费者,它是消费者接收消息的地方。 消息队

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包