示例#1
0
        /// <summary>
        /// 创建一个普通的队列发布者
        /// </summary>
        public void CreateCommonPublisher()
        {
            using (var connnection = factory.CreateConnection())
            {
                using (var channel = connnection.CreateModel())
                {
                    channel.QueueDeclare(queueName, false, false, false, null);
                    string message = QueueMessage;
                    var    body    = Encoding.UTF8.GetBytes(message);
                    channel.BasicPublish("", queueName, false, null, body);
#if DEBUG
                    Console.WriteLine(" set {0}", message);
#endif
                }
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            var connectionFactory = new RabbitMQ.Client.ConnectionFactory();

            var connection = connectionFactory.CreateConnection();

            var channel = connection.CreateModel();

            channel.QueueDeclare(queue: "identity.user",
                                 durable: true,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);


            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                var body    = ea.Body.ToArray();
                var message = Encoding.UTF8.GetString(body);
                Console.WriteLine(" [x] Received {0}", message);
            };
            channel.BasicConsume(queue: "identity.user",
                                 consumerTag: "consumer",
                                 noLocal: false,
                                 arguments: null,
                                 exclusive: true,
                                 autoAck: true,
                                 consumer: consumer);

            Console.ReadLine();
        }
示例#3
0
        public Task <(string, bool)> IsHealthy(HttpContext context, bool isDevelopment, CancellationToken cancellationToken = new CancellationToken())
        {
            try
            {
                var factory = new Rmq.Client.ConnectionFactory();
                factory.Uri = new Uri(_rabbitMqConnectionString);

                using (var connection = factory.CreateConnection())
                {
                    if (connection.IsOpen)
                    {
                        return(Task.FromResult((BeatPulseKeys.BEATPULSE_HEALTHCHECK_DEFAULT_OK_MESSAGE, true)));
                    }
                }

                return(Task.FromResult((BeatPulseKeys.BEATPULSE_HEALTHCHECK_DEFAULT_ERROR_MESSAGE, false)));
            }
            catch (Exception ex)
            {
                var message = !isDevelopment
                    ? string.Format(BeatPulseKeys.BEATPULSE_HEALTHCHECK_DEFAULT_ERROR_MESSAGE, Name)
                    : $"Exception {ex.GetType().Name} with message ('{ex.Message}')";

                return(Task.FromResult((message, false)));
            }
        }
示例#4
0
        public void Should_be_able_to_configure_EasyNetQ_to_allow_message_with_a_blank_type_field()
        {
            var are        = new System.Threading.AutoResetEvent(false);
            var validation = new NullMessageValidator();
            var bus        = RabbitHutch.CreateBus("host=localhost", r =>
                                                   r.Register <IMessageValidationStrategy>(x => validation));

            bus.Subscribe <MyMessage>("null_validation_test", message =>
            {
                Console.Out.WriteLine("Got message: {0}", message.Text);
                are.Set();
            });

            // now use the basic client API to publish some JSON to the message type exchange ...
            var factory = new RabbitMQ.Client.ConnectionFactory
            {
                HostName = "localhost"
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    const string exchange   = "EasyNetQ_Tests_MyMessage:EasyNetQ_Tests";
                    const string routingKey = "#";
                    const string bodyString = "{ Text: \"Hello from Mr Raw :)\" }";
                    var          body       = System.Text.Encoding.UTF8.GetBytes(bodyString);
                    var          properties = channel.CreateBasicProperties();
                    channel.BasicPublish(exchange, routingKey, properties, body);
                }

            are.WaitOne(1000);
        }
        public void Should_be_able_to_configure_EasyNetQ_to_allow_message_with_a_blank_type_field()
        {
            var are = new System.Threading.AutoResetEvent(false);
            var validation = new NullMessageValidator();
            var bus = RabbitHutch.CreateBus("host=localhost", r =>
                r.Register<IMessageValidationStrategy>(x => validation));

            bus.Subscribe<MyMessage>("null_validation_test", message =>
                {
                    Console.Out.WriteLine("Got message: {0}", message.Text);
                    are.Set();
                });

            // now use the basic client API to publish some JSON to the message type exchange ...
            var factory = new RabbitMQ.Client.ConnectionFactory
                {
                    HostName = "localhost"
                };
            using (var connection = factory.CreateConnection())
            using (var channel = connection.CreateModel())
            {
                const string exchange = "EasyNetQ_Tests_MyMessage:EasyNetQ_Tests";
                const string routingKey = "#";
                const string bodyString = "{ Text: \"Hello from Mr Raw :)\" }";
                var body = System.Text.Encoding.UTF8.GetBytes(bodyString);
                var properties = channel.CreateBasicProperties();
                channel.BasicPublish(exchange, routingKey, properties, body);
            }

            are.WaitOne(1000);
        }
示例#6
0
        private string RabbitConnectionChecker()
        {
            var connstr = Config.GetString("jobmoni:rabbitconn", "");

            if (string.IsNullOrWhiteSpace(connstr))
            {
                return(null);
            }
            try
            {
                RabbitMQ.Client.ConnectionFactory cf = new RabbitMQ.Client.ConnectionFactory();
                cf.AutomaticRecoveryEnabled = true;
                cf.Uri = connstr;
                cf.RequestedConnectionTimeout = 5000;
                var currConn = cf.CreateConnection();
                var md       = currConn.CreateModel();
                md.Close();
                currConn.Close();
                return(null);
            }
            catch (Exception ex)
            {
                return("rabbit状态异常!");
            }
        }
示例#7
0
        static void Main(string[] args)
        {
            var connectionFactory = new RabbitMQ.Client.ConnectionFactory()
            {
                Password = Password,
                UserName = UserName,
                HostName = HostName
            };

            var connection = connectionFactory.CreateConnection();
            var model      = connection.CreateModel();
        }
示例#8
0
 public QueuePushHandle()
 {
     sqlDb   = new SqlDb(QT.Entities.Server.ConnectionStringCrawler);
     factory = new RabbitMQ.Client.ConnectionFactory()
     {
         HostName = QT.Entities.Server.RabbitMQ_Host,
         Port     = QT.Entities.Server.RabbitMQ_Port,
         UserName = QT.Entities.Server.RabbitMQ_User,
         Password = QT.Entities.Server.RabbitMQ_Pass
     };
     connection = factory.CreateConnection();
     chanel     = connection.CreateModel();
 }
示例#9
0
        public void Publish <TEvent>(TEvent @event)
            where TEvent : Domain.Core.Events.Event
        {
            try
            {
                var factory =
                    new RabbitMQ.Client.ConnectionFactory
                {
                    UserName = "******",
                    Password = "******",
                    HostName = "localhost",
                };

                string eventTypeName = @event.TypeName;

                string queueName    = eventTypeName;
                string exchangeName = string.Empty;

                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        channel.QueueDeclare
                            (queue: queueName,
                            durable: false,
                            exclusive: false,
                            autoDelete: false,
                            arguments: null);

                        string message =
                            Newtonsoft.Json.JsonConvert.SerializeObject(@event);

                        byte[] body =
                            System.Text.Encoding.UTF8.GetBytes(message);

                        channel.BasicPublish
                            (exchange: exchangeName,
                            routingKey: queueName,
                            mandatory: false,
                            basicProperties: null,
                            body: body);

                        System.Console.WriteLine($"Sent message: { message }");
                    }
                }
            }
            catch (System.Exception ex)
            {
                System.Console.WriteLine(ex.Message);
            }
        }
示例#10
0
        private void StartBasicConsume <TEvent>() where TEvent : Domain.Core.Events.Event
        {
            var factory =
                new RabbitMQ.Client.ConnectionFactory
            {
                UserName = "******",
                Password = "******",
                HostName = "localhost",
                DispatchConsumersAsync = true,
            };

            string eventTypeName = typeof(TEvent).Name;

            string queueName    = eventTypeName;
            string exchangeName = string.Empty;

            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare
                        (queue: queueName,
                        durable: false,
                        exclusive: false,
                        autoDelete: false,
                        arguments: null);

                    //var consumer =
                    //	new RabbitMQ.Client.Events.EventingBasicConsumer(model: channel);

                    var consumer =
                        new RabbitMQ.Client.Events.AsyncEventingBasicConsumer(model: channel);

                    consumer.Received += Consumer_Received;

                    channel.BasicConsume
                        (queue: queueName,
                        autoAck: true,
                        consumerTag: string.Empty,                         // null -> Runtime Error!
                        noLocal: false,
                        exclusive: false,
                        arguments: null,
                        consumer: consumer);
                }
            }
        }
        public AssessmentResponse Handle(AssessmentRequest message)
        {
            var theRabbit = new RabbitMQ.Client.ConnectionFactory();

            theRabbit.Uri = "amqp://*****:*****@:5672/172.17.0.2";
            using (var theRabbitConnection = theRabbit.CreateConnection())
            {
                using (var model = theRabbitConnection.CreateModel())
                {
                    model.ExchangeDeclare("GraemesExchange", RabbitMQ.Client.ExchangeType.Direct, true, false, new Dictionary <string, object>());
                    var queueOk = model.QueueDeclare("GraemesQueue", true, false, false, new Dictionary <string, object>());
                    model.QueueBind("GraemesQueue", "GraemesExchange", "FooFoo", new Dictionary <string, object>());
                    model.BasicPublish("GraemesExchange", "FooFoo", false, null, System.Text.Encoding.UTF8.GetBytes("HELLO WORLD!!!"));
                }
            }

            return(new AssessmentResponse {
                Greeting = "Hello " + message.Name
            });
        }
        public bool IsQueueRunning(string busEndpoint, ILogger logger = null)
        {
            var factory = new RabbitMQ.Client.ConnectionFactory();

            factory.Uri = new Uri(busEndpoint);

            try
            {
                var conn = factory.CreateConnection();
                conn.Close();
                conn.Dispose();
                logger?.Information("QUEUE WORKING.");
            }
            catch (Exception ex)
            {
                logger?.Error("QUEUE DOWN. SERVICE DISABLED AUTOMATICALLY.");
                logger?.Error(ex, $"ERROR: {1}", ex);
                return(false);
            }

            return(true);
        }
示例#13
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMediatR(Assembly.GetExecutingAssembly());

            services.AddDbContext <ChicksDbContext>(options => {
                options.UseLazyLoadingProxies()
                .UseSqlServer(this.Configuration.GetConnectionString("ChicksSqlServer"));
                //.UseSqlServer("Data Source=sqldata;Initial Catalog=Chicks;User Id=sa;Password=Pass@word");
            }, ServiceLifetime.Scoped);

            //The ideal is use a IChicksRepositoryProviderEF
            services.AddScoped <ChicksRepositoryProviderEF>();

            services.AddScoped <IMongoClient>((serviceProvider) => new MongoClient(this.Configuration.GetConnectionString("ChicksMongo")));

            services.AddScoped <IMongoDatabase>((serviceProvider) => {
                var client = serviceProvider.GetRequiredService <IMongoClient>();

                return(client.GetDatabase(this.Configuration.GetValue <string>("MongoDatabaseSettings:DatabaseName")));
            });

            //The ideal is use a IChicksReporyProviderMongo
            services.AddScoped <ChicksRepositoryProviderMongo>();


            // Maybe can be a good idea use a abstraction of more level to use rabbitmq as
            // https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/src/BuildingBlocks/EventBus/EventBusRabbitMQ
            services.AddScoped <RabbitMQ.Client.IConnection>(x => {
                var rabbitMQConfig = new Config.RabbitMQ();
                this.Configuration.Bind("RabbitMQ", rabbitMQConfig);

                var connectionFactory = new RabbitMQ.Client.ConnectionFactory()
                {
                    UserName = rabbitMQConfig.UserName,
                    Password = rabbitMQConfig.Password,
                    HostName = rabbitMQConfig.HostName
                };

                return(connectionFactory.CreateConnection());
            });

            services.AddControllers();

            services.AddSwaggerGen(config =>
            {
                config.EnableAnnotations();

                config.SwaggerDoc("v1",
                                  new OpenApiInfo
                {
                    Title   = "Chicks",
                    Version = "v1.0.0"
                });

                config.CustomSchemaIds((type) => type.FullName);


                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                config.IncludeXmlComments(xmlPath);
            });
        }