• Rabbit MQ一些参数解释


    //ConnectionFactory(连接工厂): 生产Connection的的工厂

    //Connection(连接):是RabbitMQ的socket的长链接,它封装了socket协议相关部分逻辑

    //Channel(频道 | 信道): 是建立在Connection连接之上的一种轻量级的连接,我们大部分的业务操作是在Channel这个接口中完成的,包括定义队列的声明queueDeclare、交换机的声明exchangeDeclare、队列的绑定queueBind、发布消息basicPublish、消费消息basicConsume等。如果把Connection比作一条光纤电缆的话,那么Channel信道就比作成光纤电缆中的其中一束光纤。一个Connection上可以创建任意数量的Channel。

    //Producer(生产者):生产者用于发布消息

    //Exchange(交换机):生产者会将消息发送到交换机,然后交换机通过路由策略(规则)将消息路由到匹配的队列中去

    //Routing Key(路由键):一个String值,用于定义路由规则,在队列绑定的时候需要指定路由键,在生产者发布消息的时候需要指定路由键,当消息的路由键和队列绑定的路由键匹配时,消息就会发送到该队列。

    //Queue(队列):用于存储消息的容器,可以看成一个有序的数组,生产者生产的消息会发送到交换机中,最终交换机将消息存储到某个或某些队列中,队列可被消费者订阅,消费者从订阅的队列中获取消息。

    //Binding(绑定): Binding并不是一个概念,而是一种操作,RabbitMQ中通过绑定,以路由键作为桥梁将Exchange与Queue关联起来(Exchange—> Routing Key—> Queue),这样RabbitMQ就知道如何正确地将消息路由到指定的队列了,通过queueBind方法将Exchange、Routing Key、Queue绑定起来

    //Consumer(消费者):用于从队列中获取消息,消费者只需关注队列即可,不需要关注交换机和路由键,消费者可以通过basicConsume(订阅模式可以从队列中一直持续的自动的接收消息)或者basicGet(先订阅消息,然后获取单条消息,再然后取消订阅,也就是说basicGet一次只能获取一条消息,如果还想再获取下一条还要再次调用basicGet)来从队列中获取消息

    //vhost(虚拟主机): RabbitMQ 通过虚拟主机(virtual host)来分发消息, 拥有自己独立的权限控制,不同的vhost之间是隔离的,单独的。vhost是权限控制的基本单位,用户只能访问与之绑定的vhost,默认vhost:”/” ,默认用户”guest” 密码“guest”,来访问默认的vhost。


    //队列声明
    //queue 队列名称
    //durable 是否持久化
    //exclusive 是否排外
    //autoDelete 是否自动删除
    //arguments 什么时候自动删除
    channel.QueueDeclare(queue: "hello",
    durable: false,
    exclusive: false,
    autoDelete: false,
    arguments: null);


    //发送消息声明
    //exchange 交换器名称
    //routingKey 路由键
    //basicProperties 包含14个成员 根据需求使用
    //body 消息体
    channel.BasicPublish(exchange: "",
    routingKey: "hello",
    basicProperties: null,
    body: body);

    //新建消费者
    var consumer = new EventingBasicConsumer(channel);

    //消费者声明
    channel.BasicConsume(queue: "hello",
    noAck: true,
    consumer: consumer);


    var properties = channel.CreateBasicProperties();
    //将消息设置为持久性消息
    properties.Persistent = true;

    //限制rabbitmq不要给同一个消费者推送多于N条消息
    channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

    //deliveryTag 该消息的index
    //multiple 是否批量.true:将一次性ack所有小于deliveryTag的消息。
    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);

    //创建一个交换
    //直接 direct 一对一 完全匹配
    //主题 topic .* .#模糊匹配
    //标题 headers 几乎没用
    //扇出 fanout 广播
    channel.ExchangeDeclare(exchange: "logstest", type: "fanout");

    //队列绑定
    //queue 队列名称
    //exchange 交换器名称
    //routingKey 路由key
    //arguments 其它的一些参数
    channel.QueueBind(queue: queueName,
    exchange: "logstest",
    routingKey: "");

    -------------------------------------------

    学而不思则罔,思而不学则殆

    你好,我是【咬轮猫】

    -------------------------------------------

  • 相关阅读:
    pythonic奇淫技巧收集
    广联达软件关闭非必要后台进程、服务
    寒假集训Day6 H(二分答案)
    GJSxCXzcjw
    生活新的篇章~
    Apex: SOQL语句未查询到数据时的返回值
    VS Code关联Salesforce失效
    一个sql和C#代码结合的分组求和的查询
    2022开发上的一些常见技术问题整理
    2021迷惘惆怅的一年
  • 原文地址:https://www.cnblogs.com/Hero-/p/9602573.html
Copyright © 2020-2023  润新知