예제 #1
0
        public DefaultActiveConsumerProvider(ActiveConsumerOptions activeConsumerOptions, Action <RecieveResult> action)
        {
            this.action = action;
            this.activeConsumerOptions = activeConsumerOptions;

            Consumer = ActiveConsumer.Create(activeConsumerOptions);
        }
예제 #2
0
        /// <summary>
        /// 测试消费者
        /// </summary>
        public static void TestConsumer()
        {
            // 数据回调
            _onMessage += OnMessageHandle;
            ActiveConsumer consumer = new ActiveConsumer(_topic, _brokerUrl, _onMessage);

            consumer.Start();
        }
        public async Task TopicTest()
        {
            int counter     = 0;
            var destination = $"integration.{topic}";

            //消费
            var consumer = new ActiveConsumer(true, brokerUris)
            {
                Password = password,
                UserName = userName
            };
            await consumer.ListenAsync(new ListenOptions()
            {
                AutoAcknowledge           = false,
                Destination               = destination,
                Durable                   = false,
                FromQueue                 = false,
                PrefetchCount             = 10,
                RecoverWhenNotAcknowledge = false
            }, result =>
            {
                Output.WriteLine($"{destination}:" + result.Message);
                counter++;
                result.Commit();
            });

            //发布
            var producer = new ActiveProducer(true, brokerUris)
            {
                Password = password,
                UserName = userName
            };
            await producer.PublishAsync(destination, "hello active");

            BlockUntil(() => counter >= 1, 3000);

            producer.Dispose();
            consumer.Dispose();

            Assert.Equal(1, counter);
        }
        public async Task SelectorTest()
        {
            int counter     = 0;
            var destination = $"integration.selector.{queue}";


            /*
             * 数字表达式: >,>=,<,<=,BETWEEN,=
             * 字符表达式:=,<>,IN
             * IS NULL 或 IS NOT NULL
             * 逻辑AND, 逻辑OR, 逻辑NOT
             *
             * 常数类型
             * 数字:3.1415926, 5
             * 字符: ‘a’,必须带有单引号
             * NULL,特别的常量
             * 布尔类型: TRUE,FALSE
             */

            //消费
            var consumer = new ActiveConsumer(true, brokerUris)
            {
                Password = password,
                UserName = userName
            };
            await consumer.ListenAsync(new ListenOptions()
            {
                AutoAcknowledge           = false,
                Destination               = destination,
                Durable                   = false,
                FromQueue                 = true,
                PrefetchCount             = 10,
                RecoverWhenNotAcknowledge = false,
                Selector                  = "apple = 10000 and xiaomi in ('1000','2000','3000') and huawei is null"
            }, result =>
            {
                Output.WriteLine($"{destination}:" + result.Message);
                counter++;
                result.Commit();
            });

            //发布
            var producer = new ActiveProducer(true, brokerUris)
            {
                Password = password,
                UserName = userName
            };
            var dict = new Dictionary <string, object>()
            {
                { "apple", 10000 },
                { "xiaomi", "5000" }
            };
            await producer.SendAsync(new ActiveMessage()
            {
                Destination = destination,
                Message     = "hello active",
                Properties  = dict
            });

            dict["xiaomi"] = "2000";
            await producer.SendAsync(new ActiveMessage()
            {
                Destination = destination,
                Message     = "hello active again",
                Properties  = dict
            });

            BlockUntil(() => counter >= 1, 3000);

            producer.Dispose();
            consumer.Dispose();

            Assert.Equal(1, counter);
        }