• RabbitMQ 使用总结


    RabbitMQ

    1.RabbitMQ常用的交换器类型有direct、topic、fanout、headers四种。

    1.1 Direct Exchange直接

    该类型的交换器将所有发送到该交换器的消息被转发到RoutingKey指定的队列中,也就是说路由到BindingKey和RoutingKey完全匹配的队列中。

    1.2 Topic Exchange 主题

    该类型的交换器将所有发送到Topic Exchange的消息被转发到所有RoutingKey中指定的Topic的队列上面。

    Exchange将RoutingKey和某Topic进行模糊匹配,其中“”用来匹配一个词,“#”用于匹配一个或者多个词。例如“com.#”能匹配到“com.rabbitmq.oa”和“com.rabbitmq”;而"login."只能匹配到“com.rabbitmq”。

    1.3 Fanout Exchange 扇形分叉

    该类型不处理路由键,会把所有发送到交换器的消息路由到所有绑定的队列中。优点是转发消息最快,性能最好(一发多收)

    1.4 Headers Exchange

    该类型的交换器不依赖路由规则来路由消息,而是根据消息内容中的headers属性进行匹配。headers类型交换器性能差,在实际中并不常用。

    2.消息生产者确认:
    开启事务机制
    channel.TxSelect(); //事务是协议支持的
    channel.TxCommit(); //只有事务提交成功以后,才会真正的写入到队列里面去
    channel.TxRollback(); //事务回滚

    //开启消息异步确认模式
    channel.ConfirmSelect();
    if (channel.WaitForConfirms()) //如果一条消息或多消息都确认发送

    channel.WaitForConfirmsOrDie();//如果所有消息发送成功 就正常执行;如果有消息发送失败;就抛出异常;

    3.消息消费者确认消息:
    autoAck: true 自动确认;
    channel.BasicConsume(queue: "ConsumptionACKConfirmQueue", autoAck: true, consumer: consumer);

    手动确认 消息正常消费 告诉Broker:你可以把当前这条消息删除掉了
    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
    否定:告诉Broker,这个消息我没有正常消费; requeue: true:重新写入到队列里去; false:你还是删除掉;
    channel.BasicReject(deliveryTag: ea.DeliveryTag, requeue: true);

    4.设置消息优先级最高 重新写入到队列中去,消息持久化需要将交换机持久化、队列持久化、消息持久化,才能最终达到持久化的目的
    IBasicProperties props = channel.CreateBasicProperties();
    props.Priority = 9; //0-9数值越大优先级越高
    props.DeliveryMode = 2;//2=消息持久化模式;1=默认不持久化

    5.rabbitmq集群:
    普通集群:只同步了数据结构,没有同步元数据,真实获取数据还要到存储数据的节点上去数据;没有做到高可用,高并发;
    消息队列集群:同步了数据结构和元数据,一个节点失败,不影响系统正常发送消息,接收消息;

    由于Erlang节点间通过认证Erlang cookie的方式来允许互相通信,所以个节点RABBITMQ_ERLANG_COOKIE必须设置为相同的

  • 相关阅读:
    使用promxy实现prometheus 的ha 以及api 聚合
    victoriametrics 快速高效&&可扩展的时序数据库
    statping web 状态监控服务
    prometheus 一些不错的exporter
    fusionauth 通用sso 解决方案学习二 基本试用
    fusionauth 通用sso 解决方案学习一 环境运行
    zeeqs 一个通用的zeebe 数据查询服务
    zeebe 0.23.1 变动说明
    zeebe 0.23.1 发布
    alpine.js 像使用tailwindcss一样编写js
  • 原文地址:https://www.cnblogs.com/csj007523/p/14844246.html
Copyright © 2020-2023  润新知