Esempio n. 1
0
        public static RabbitMqEndpoint NewOutboundPublisher(string name, string type, string routingKeyOrTopicName, PublisherParameters p = null, MessageParameters defaultMessageParameters = null, CancellationToken token = default(CancellationToken))
        {
            var exchangeType = GetFullExchangeType(type);

            p ??= new PublisherParameters()
            {
                AcceptReplies = false, AutoDelete = true, Durable = false, EnableConfirmSelect = false, ReplyQueueTtl = 0, Ttl = 6000
            };
            defaultMessageParameters ??= new MessageParameters()
            {
                AutoAck = false, Durable = false, Mandatory = false, Persistent = false, Priority = 3, Resilient = false, TimeOut = 6000
            };

            var ret = new RabbitMqEndpoint
            {
                Channel                  = _RabbitOut.CreateModel(),
                EndpointType             = EndpointTypeEnum.Publisher,
                ExchangeName             = name,
                QueueName                = DefineQueueName(name, exchangeType, "", false),
                RoutingKeyOrTopicName    = routingKeyOrTopicName,
                ExchangeId               = Guid.NewGuid(),
                LocalCancellationToken   = _RabbitOutCts?.Token ?? token,
                ChannelParameters        = p,
                ExchangeType             = GetFullExchangeType(type),
                DefaultMessageParameters = defaultMessageParameters
            };

            VerboseLoggingHandler.Log($"Building a {exchangeType} outbound publisher, name='{name}', routingKeyOrTopicName='{routingKeyOrTopicName}', durable='{p.Durable}', ttl='{p.Ttl}', autoDelete='{p.AutoDelete}', acceptReplies='{p.AcceptReplies}', confirmSelect='{p.EnableConfirmSelect}'");
            ret.ConnectToExchange();

            if (p.EnableConfirmSelect)
            {
                ret.Channel.ConfirmSelect();
            }

            if (p.AcceptReplies)
            {
                VerboseLoggingHandler.Log($"Building a return consumer, ExchangeId='{ret.ExchangeId}', replyQueueTtl='{p.ReplyQueueTtl}'");
                ret.DefineRpcConsumer(ret.ExchangeName, ret.ExchangeId, p.ReplyQueueTtl);
            }

            VerboseLoggingHandler.Log("Exchange ready");
            return(ret);
        }
Esempio n. 2
0
        static async Task Main(string[] args)
        {
            var mp = new MessageParameters()
            {
                AutoAck    = false,
                Durable    = true,
                Mandatory  = true,
                Persistent = true,
                Priority   = 3,
                Resilient  = true,
                TimeOut    = 32000
            };
            var ep = new PublisherParameters()
            {
                AutoDelete          = false,
                Durable             = true,
                AcceptReplies       = true,
                ReplyQueueTtl       = 8000,
                Ttl                 = 8000,
                EnableConfirmSelect = true
            };

            Console.Write("Enter server name to connect to: ");
            var broker = Console.ReadLine();

            Console.Write("Login Name: ");
            var login = Console.ReadLine();

            Console.Write("Password: "******"/", login, password, 0, "RabbitMqFacadeTest1", cts);

            var cp = new ConsumerParameters()
            {
                AutoAckMode = ConsumerParameters.AutoAckModeEnum.Manual,
                AutoDelete  = false,
                Durable     = true
            };

            var consumer = RabbitMqEndpoint.NewInboundConsumer("test", "d", "d", cp);

            consumer.IncomingMessage += OnIncomingMessage;

            consumer.Listen();

            var publisher = RabbitMqEndpoint.NewOutboundPublisher("test", "d", "d", ep, mp);

            var response = await publisher.SendRpcMessageAsync("My name is Bob");

            if (response == null)
            {
                Console.WriteLine("No one there!");
            }
            else
            {
                Console.WriteLine(RabbitMqEndpoint.ConvertMessageToString(response));
            }

            response = await publisher.SendRpcMessageAsync("My name is Sue");

            if (response == null)
            {
                Console.WriteLine("No one there!");
            }
            else
            {
                Console.WriteLine(RabbitMqEndpoint.ConvertMessageToString(response));
            }

            response = await publisher.SendRpcMessageAsync("Ribbit");

            if (response == null)
            {
                Console.WriteLine("No one there!");
            }
            else
            {
                Console.WriteLine(RabbitMqEndpoint.ConvertMessageToString(response));
            }

            response = await publisher.SendRpcMessageAsync("My name is Rachel");

            if (response == null)
            {
                Console.WriteLine("No one there!");
            }
            else
            {
                Console.WriteLine(RabbitMqEndpoint.ConvertMessageToString(response));
            }

            Console.ReadLine();
        }