0

我不明白,我有一个自动发送各种消息的客户端,它不等待确认,但它必须发送它们,仅此而已,但似乎它只发送第一个消息,而只有当我发送所有其他消息时关闭应用程序。

我哪里错了?我应该设置什么?

var config = new RawRabbitConfiguration()
                {
                    Username = username,
                    Password = password,
                    VirtualHost = "/",
                    Hostnames = new List<string>() { hostname },
                    AutoCloseConnection = false,
                    //Ssl = new SslOption() {  Enabled = true },
                    Port = port,
                    Exchange = new GeneralExchangeConfiguration
                    {
                        AutoDelete = false,
                        Durable = true,
                        Type = RawRabbit.Configuration.Exchange.ExchangeType.Direct
                    },
                    Queue = new GeneralQueueConfiguration
                    {
                        Exclusive = false,
                        AutoDelete = false,
                        Durable = true
                    }
                };

var options = new RawRabbitOptions() { ClientConfiguration = config };
client = RawRabbitFactory.CreateSingleton(options);

client.SubscribeAsync<MessageModel>(async msg =>
                {
                    return await Task.Run(() => MessageReceived(msg));
                },
                ctx => ctx.UseSubscribeConfiguration(
                    cfg => cfg.FromDeclaredQueue(
                        queue => queue.WithName(queueName))))
                        .GetAwaiter();



更新:我使用的发送功能...

        public void SendMessage(MessageModel message, string machineName = null, string exchangeName = null)
        {
            if (!string.IsNullOrEmpty(machineName))
                message.MachineName = machineName;
            else if (string.IsNullOrEmpty(message.MachineName))
                message.MachineName = this.MachineName;

            if (!string.IsNullOrEmpty(LastMessageReceived?.ID))
                message.RequestID = LastMessageReceived.ID;
            else
                message.RequestID = string.Empty;

            if (!string.IsNullOrEmpty(LastMessageReceived?.MachineName))
                message.MachineNameDest = LastMessageReceived.MachineName;
            else if (string.IsNullOrEmpty(message.MachineNameDest))
                message.MachineNameDest = string.Empty;

            try
            {
                if (string.IsNullOrEmpty(exchangeName))
                    client.PublishAsync<MessageModel>(message);
                else
                    client.PublishAsync<MessageModel>(message,
                        ctx => ctx.UsePublishConfiguration(
                            cfg => cfg.OnExchange(exchangeName)));
            }
            catch (Exception ex)
            {
                OnError?.Invoke(this, ex);
            }

            LastMessageReceived = null;
        }


编辑:

在什么情况下会生成错误“Stage Initialized has no additional middlewares registered”?

我不明白为什么会在“SubscribeAsync”上生成此错误并且之后不发送消息。:(

请帮我。

4

0 回答 0