• 【EasyNetQ】- 控制队列名称


    在为队列生成名称时,EasyNetQ的默认行为是使用消息类型名称并将其附加到订阅ID例如PartyInvitation,命名空间中消息类型EasyNetQ.Tests.Integration将使用队列名称EasyNetQ.Tests.Integration.PartyInvitation:EasyNetQ.Tests_schedulingTest1,假设订阅ID为schedulingTest1

    命名约定

    您可以通过实现IConventions或继承默认约定来创建自己的自定义命名约定,并在服务容器中注册此实现:

    public class MyConventions : Conventions
    {
      public MyConventions(ITypeNameSerializer typeNameSerializer) : base(typeNameSerializer)
      {
        ErrorQueueNamingConvention = messageInfo => "MyErrorQueue" ;
      }
    }
    var bus = RabbitHutch.CreateBus(connectionString, services => services.Register(c => new MyConventions()));

    另见:https://github.com/EasyNetQ/EasyNetQ/wiki/Replacing-EasyNetQ-Components

    控制队列名称

    要控制单个队列的名称,请使用以下Queue属性注释消息类

    [Queue("TestMessagesQueue", ExchangeName = "MyTestExchange")]
    public class TestMessage
    {
       public string Text { get; set; }
    }
    
    // ...
    
    bus.Subscribe<TestMessage>(string.Empty, msg => Console.WriteLine(msg.Text));

    在这里,我们告诉EasyNetQ使用TestMessagesQueue作为队列名称,并使用MyTestExchange作为交换名称。请注意,传递给Subscribe方法的subscriptionId为空。如果指定subscriptionId,则它将附加到末尾并用作队列名称。

    使用EasyNetQ未发布的消息

    使用QueueAttribute允许使用来自任何队列的消息。这可用于消耗由EasyNetQ以外的框架发布的消息,只要满足一个条件 - 队列消息具有属性type集。type在消息反序列化期间使用属性来确定消息的类型。只要将此属性设置为有意义的内容,就可以使用消息。解码类型名称在ITypeNameSerializer.Deserialize方法中完成

    如果您决定实现自己的自定义,请ITypeNameSerializer注意如何实现该Deserialize方法。如果您的实现是处理器密集型的,那么您就有可能限制可以使消息出列的速度。例如,没有某种类型的缓存,程序集扫描是一个坏主意。

    命名队列的注意事项

    将队列名称设置为空字符串将使用默认命名行为。队列名称的最大长度为255个字符(这由RabbitMQ客户端库强制执行)。名称可以是字母,数字,连字符,下划线,句点或冒号的序列。队列名称以“amq”开头。保留用于预先声明和标准化的队列

  • 相关阅读:
    javaweb-番外篇-Commons-FileUpload组件上传文件
    javaweb-3-在Eclipse中引入Tomcat
    javaweb-2-Tomcat初步学习与使用
    javaweb-1-B/S初论
    jdk安装与配置
    程序、计算机程序、java初论
    RPC原理及RPC实例分析
    java堆排序(大根堆)
    数据结构——堆(Heap)大根堆、小根堆
    Spring事务传播机制和数据库隔离级别
  • 原文地址:https://www.cnblogs.com/wangwust/p/9437437.html
Copyright © 2020-2023  润新知