Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RabbitMQ未在无效路由密钥上引发错误_C#_Rabbitmq_Rabbitmq Exchange - Fatal编程技术网

C# RabbitMQ未在无效路由密钥上引发错误

C# RabbitMQ未在无效路由密钥上引发错误,c#,rabbitmq,rabbitmq-exchange,C#,Rabbitmq,Rabbitmq Exchange,我在C#中有以下代码,如果路由密钥无效,它不会抛出错误 var connFactory = GetConnectionFactory(); using (var conn = connFactory.CreateConnection()) { using (var channel = conn.CreateModel()) { channel.TxSelect(); var publicationAddress = new Publicatio

我在C#中有以下代码,如果路由密钥无效,它不会抛出错误

var connFactory = GetConnectionFactory();

using (var conn = connFactory.CreateConnection())
{
    using (var channel = conn.CreateModel())
    {
        channel.TxSelect();

        var publicationAddress = new PublicationAddress(ExchangeType.Direct, Settings.ServiceBusExchange, Settings.ServiceBusRoutingKey);

        var headers = new Dictionary<String, Object>();
        headers.Add("TransactionID", transactionID);

        var basicProperties = new BasicProperties();
        basicProperties.ContentEncoding = Encoding.UTF8.ToString();
        basicProperties.ContentType = "text/xml";
        basicProperties.Headers = headers;
        basicProperties.DeliveryMode = 2;

        var payLoad = Encoding.UTF8.GetBytes(message);

        channel.BasicPublish(publicationAddress, basicProperties, payLoad);
        channel.TxCommit();
    }
}
var connFactory=GetConnectionFactory();
使用(var conn=connFactory.CreateConnection())
{
使用(var channel=conn.CreateModel())
{
channel.TxSelect();
var publicationAddress=新的publicationAddress(ExchangeType.Direct、Settings.ServiceBusExchange、Settings.ServiceBusRoutingKey);
var headers=newdictionary();
headers.Add(“TransactionID”,TransactionID);
var basicProperties=新的basicProperties();
basicProperties.ContentEncoding=Encoding.UTF8.ToString();
basicProperties.ContentType=“text/xml”;
basicProperties.Headers=头;
basicProperties.DeliveryMode=2;
var payLoad=Encoding.UTF8.GetBytes(消息);
channel.BasicPublish(发布地址、基本属性、有效负载);
channel.TxCommit();
}
}
我的问题是,如果路由密钥无效,如何使代码抛出错误?与使用带有无效路由密钥的RabbitMQ UI发布消息类似,它会给出一条消息“消息已发布,但未路由”


提前感谢。

为此,有一种叫做PublisherAcknoledgement的东西。这基本上会向发布者提供有关消息状态的确认。您还可以区分消息是到达了till Exchange还是到达了till消费者。你只需要妥善处理每一件事


这是了解正在传递的消息的状态的好方法。您可能不知道这是否是由于错误的路由密钥造成的,但通过执行各种检查,您可能能够缩小到结果。

为此,有一种称为PublisherAcknoledgement的方法。这基本上会向发布者提供有关消息状态的确认。您还可以区分消息是到达了till Exchange还是到达了till消费者。你只需要妥善处理每一件事


这是了解正在传递的消息的状态的好方法。您可能不知道这是否是由于错误的路由密钥造成的,但通过执行各种检查,您可能能够缩小到结果。

不存在“无效路由密钥”的概念,因为您可以将队列动态绑定到交换机

顺便说一句,您要查找的是“不可终止的消息”,您必须使用
强制
标志,并在同一通道中实现
ReturnListener
,如果消息未到达任何队列,将重定向到处理程序。 以这种方式(代码是Java,但在c#中大致相同):


它不存在“无效路由密钥”的概念,因为您可以将队列动态绑定到交换机

顺便说一句,您要查找的是“不可终止的消息”,您必须使用
强制
标志,并在同一通道中实现
ReturnListener
,如果消息未到达任何队列,将重定向到处理程序。 以这种方式(代码是Java,但在c#中大致相同):


Publish Confirm
确认消息到达服务器而不是队列。
Publish Confirm
确认消息到达服务器而不是队列。
 boolean isMandatory = true; // if true the message will be handled by HandlingReturnListener
        // if false the message will be dropped!

        channel.addReturnListener(new ReturnListener() {
            public void handleReturn(int replyCode, String replyText, String exchange, String routingKey, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println(replyText + ":" + replyCode);
                System.out.println("********  UnHandled Message ***************");

            }

        });

        String myExchange = "myUnroutableExchange_";
        channel.exchangeDeclare(myExchange, "topic", false, false, null);
        channel.basicPublish(myExchange, "NO_KEY", isMandatory, null, "".getBytes());