zoukankan      html  css  js  c++  java
  • RabbitMQ的几种工作模式

    maven:

        <dependencies>
            <!-- RabbitMQ的客户端 -->
            <dependency>
                <groupId>com.rabbitmq</groupId>
                <artifactId>amqp-client</artifactId>
                <version>3.4.1</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.7</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.3.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.amqp</groupId>
                <artifactId>spring-rabbit</artifactId>
                <version>1.4.0.RELEASE</version>
            </dependency>
    
        </dependencies>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    1、Work模式 
    这里写图片描述

    一个生产者,多个消费者,每个消费者获取到的消息唯一。

    1、  自动模式
        消费者从消息队列获取消息后,服务端就认为该消息已经成功消费。
    2、  手动模式
        消费者从消息队列获取消息后,服务端并没有标记为成功消费
        消费者成功消费后需要将状态返回到服务端
    • 1
    • 2
    • 3
    • 4
    • 5

    2、订阅模式 
    这里写图片描述

    一个生产者发送的消息会被多个消费者获取。 
    生产者:可以将消息发送到队列或者是交换机。 
    消费者:只能从队列中获取消息。 
    如果消息发送到没有队列绑定的交换机上,那么消息将丢失。

    3、路由模式 
    这里写图片描述

    1、 发送消息到交换机并且要指定路由key 
    2、 消费者将队列绑定到交换机时需要指定路由key

    4、通配符模式 
    这里写图片描述

    将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词。

    5、RPC模式 
    这里写图片描述

    (RPC) Remote Procedure Call Protocol 远程过程调用协议

    在一个大型的公司,系统由大大小小的服务构成,不同的团队维护不同的代码,部署在不同的机器。但是在做开发时候往往要用到其它团队的方法,因为已经有了实现。但是这些服务部署不同的机器上,想要调用就需要网络通信,这些代码繁琐且复杂,一不小心就会写的很低效。RPC协议定义了规划,其它的公司都给出了不同的实现。比如微软的wcf,以及现在火热的WebApi。

    在RabbitMQ中RPC的实现也是很简单高效的,现在我们的客户端、服务端都是消息发布者与消息接收者。

    首先客户端通过RPC向服务端发出请求

    我这里有一堆东西需要你给我处理一下,correlation_id:这是我的请求标识,erply_to:你处理完过后把结果返回到这个队列中。

    服务端拿到了请求,开始处理并返回

    correlation_id:这是你的请求标识 ,原封不动的给你。 这时候客户端用自己的correlation_id与服务端返回的id进行对比。是我的,就接收。

  • 相关阅读:
    conda创建、删除、重命名环境
    jupyter notebook选择conda环境
    conda 创建tensorflow虚拟环境后,无法import tensorflow在jupyter
    labelme2coco
    MacOs 10.14.3 Matlab2018b 解决“找不到已安装的编译器 'Xcode Clang++'。错误使用mex,未找到合适的编译器”问题
    MaskRCNN 奔跑自己的数据
    labelme2coco问题:TypeError: Object of type 'int64' is not JSON serializable
    kill 掉 占据端口的进程
    关于对多层嵌套的json字符串取目标值的问题
    关于Jmeter测试移动端应用时提示非法登录,不是合法的登录设备时的解决办法
  • 原文地址:https://www.cnblogs.com/zxtceq/p/8559100.html
Copyright © 2011-2022 走看看