0

I didn't understand, I have a client that sends various messages autonomously, it doesn't wait for the ack but it has to send them and that's it, but seems that it send only the first one and all the others only when I close the application.

where am I wrong? what should i set?.

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();



UPDATE: function for sending that I use...

        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;
        }


EDIT:

In what case is the error "Stage Initialized has no additional middlewares registered" generated ?

I cannot understand why this error is generated on "SubscribeAsync" and after does not send messages. :(

Please, help me.

Danilo
  • 631
  • 1
  • 9
  • 24
  • This function publishes a single message. How do you use it to publish many messages? –  Jun 04 '19 at 13:30
  • at the start of the app I send a "START" msg, then subsequently I checks the app parameters (Environment.GetCommandLineArgs) and based on these sends a message based on the action decided by the parameters, so they are two messages in sequence fired when starting the app, both using the SendMessage. – Danilo Jun 04 '19 at 13:46

0 Answers0