public ONSBaseConsumer(string topic, string consumerId, PushConsumer consumer, Type classType) { ClassType = classType; Type = ONSMessageType.BASE.ToString(); Topic = topic; ConsumerId = consumerId; _consumer = consumer; TagList = new List <string>(); }
/// <summary> /// 消费订阅 /// </summary> /// <param name="listen">消息监听处理</param> /// <param name="subExpression">标签</param> public void Start(MessageListener listen, string subExpression = "*") { if (_consumer != null) { throw new DcpException("当前已开启过该消费,无法重新开启,需先关闭上一次的消费(调用Close())。"); } _consumer = ONSFactory.getInstance().createPushConsumer(_factoryInfo); _consumer.subscribe(_factoryInfo.getPublishTopics(), subExpression, listen); _consumer.start(); }
public virtual PushConsumer createPushConsumer(ONSFactoryProperty factoryProperty) { global::System.IntPtr cPtr = ONSClient4CPPPINVOKE.ONSFactoryAPI_createPushConsumer(swigCPtr, ONSFactoryProperty.getCPtr(factoryProperty)); PushConsumer ret = (cPtr == global::System.IntPtr.Zero) ? null : new PushConsumer(cPtr, false); if (ONSClient4CPPPINVOKE.SWIGPendingException.Pending) { throw ONSClient4CPPPINVOKE.SWIGPendingException.Retrieve(); } return(ret); }
public override void Start() { if (this.listener == null) { throw new NotFoundMessageListenerException(); } consumer = ONSFactory.getInstance().createPushConsumer(this.FactoryProperty); consumer.subscribe(Topic, SubExpression, listener); consumer.start(); }
/// <summary> /// 启动消息消费客户端 /// </summary> public static void StartPushConsumer(string regionID, string accessKey, string secretKey, string topicID, string consumerID) { PushConsumer _consumer = ONSFactory.getInstance().createPushConsumer(getFactoryProperty(accessKey, secretKey, topicID, consumerID)); _consumer.subscribe(topicID, "*", new ConsumerListener(consumerID)); _consumer.start(); ConsumerParam consumerParam = new ConsumerParam() { Ons_RegionID = regionID, Ons_AccessKey = accessKey, Ons_SecretKey = secretKey, TopicID = topicID, ConsumerID = consumerID }; _Consumer_TopicDict.Add(consumerID + String_Splite_Char + topicID, _consumer); //MyTimer watchConsumerAccumulate = new MyTimer(); //watchConsumerAccumulate.Elapsed += ConsumerAccumulateEvent; //watchConsumerAccumulate.OnsConsumerParam = consumerParam; //watchConsumerAccumulate.Interval = 3000; //watchConsumerAccumulate.Start(); }
/// <summary> /// 关闭订阅消费 /// </summary> public void Close() { _consumer?.shutdown(); _consumer = null; }
public static void CreatePushConsumer() { _consumer = ONSFactory.getInstance().createPushConsumer(getFactoryProperty()); }
public AliyunConsumer(PushConsumer consumer) { _consumer = consumer; }
public void InitializeNormalConsumer() { consumer = ONSFactory.getInstance().createPushConsumer(factoryInfo); }
/// <summary> /// 初始化属性 /// </summary> static void InitializeProperties() { //实例化生产者的服务类列表 ONSProducerServiceList = new List <object>(); //实例化消费者的服务类列表 ONSConsumerServiceList = new List <object>(); //实例化生产者列表 ONSProducerList = new List <IONSProducer>(); //实例化消费者列表 ONSConsumerList = new List <IONSConsumer>(); //实例化Executer方法对应的委托实例字典 ExecuterMethodDictionary = new ConcurrentDictionary <string, MethodInfo>(); //实例化Checker方法对应的委托实例字典 CheckerMethodDictionary = new ConcurrentDictionary <string, MethodInfo>(); //* //获取当前应用域下的所有程序集 Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); //找出所有程序集下带有[ONSConsumer]特性的所有方法,并放入自定义消费者方法列表中 if (assemblies != null) { foreach (Assembly assembly in assemblies) { Type[] types = assembly.GetTypes(); if (types != null) { foreach (Type type in types) { if (type.BaseType != null) { if (type.BaseType.FullName != null) { //获取当前应用作为"事务"类型生产者的相关信息 CreateProducer <AbstractTranProducerService <object> >(assembly, type, ONSMessageType.TRAN, (onsProducerFactoryProperty, topic, producerId) => { //实例化ONSLocalTransactionChecker ONSLocalTransactionChecker checker = new ONSLocalTransactionChecker(); //实例化TransactionProducer TransactionProducer transactionProducer = ONSFactory.getInstance().createTransactionProducer(onsProducerFactoryProperty, checker); //实例化代理类ONSTransactionProducer return(new ONSTranProducer(topic, producerId, transactionProducer)); }); ////获取当前应用作为"顺序"类型生产者的相关信息 //CreateProducer<AbstractOrderProducerService<object>>(assembly, type, ONSMessageType.ORDER, (onsProducerFactoryProperty, topic, producerId) => //{ // //实例化OrderProducer // OrderProducer orderProducer = ONSFactory.getInstance().createOrderProducer(onsProducerFactoryProperty); // //实例化代理类ONSOrderProducer // return new ONSOrderProducer(topic, producerId, orderProducer); //}); ////获取当前应用作为"普通"类型生产者的相关信息 //CreateProducer<AbstractBaseProducerService<object>>(assembly, type, ONSMessageType.BASE, (onsProducerFactoryProperty, topic, producerId) => //{ // //实例化Producer // Producer baseProducer = ONSFactory.getInstance().createProducer(onsProducerFactoryProperty); // //实例化代理类ONSProducer // return new ONSBaseProducer(topic, producerId, baseProducer); //}); //获取当前应用作为"事务"类型消费者的相关信息 CreateConsumer <AbstractTranConsumerService <object> >(assembly, type, ONSMessageType.TRAN, (onsConsumerFactoryProperty, topic, consumerId, classType) => { //实例化PushConsumer PushConsumer pushConsumer = ONSFactory.getInstance().createPushConsumer(onsConsumerFactoryProperty); //实例化代理类ONSTransactionConsumer return(new ONSTranConsumer(topic, consumerId, pushConsumer, classType)); }); //获取当前应用作为"顺序"类型消费者的相关信息 CreateConsumer <AbstractOrderConsumerService <object> >(assembly, type, ONSMessageType.ORDER, (onsConsumerFactoryProperty, topic, consumerId, classType) => { //实例化OrderConsumer OrderConsumer orderConsumer = ONSFactory.getInstance().createOrderConsumer(onsConsumerFactoryProperty); //实例化代理类ONSOrderConsumer return(new ONSOrderConsumer(topic, consumerId, orderConsumer, classType)); }); //获取当前应用作为"普通"类型消费者的相关信息 CreateConsumer <AbstractBaseConsumerService <object> >(assembly, type, ONSMessageType.BASE, (onsConsumerFactoryProperty, topic, consumerId, classType) => { //实例化PushConsumer PushConsumer pushConsumer = ONSFactory.getInstance().createPushConsumer(onsConsumerFactoryProperty); //实例化代理类ONSTransactionConsumer return(new ONSBaseConsumer(topic, consumerId, pushConsumer, classType)); }); } } } } } } //*/ }
/// <summary> /// 初始化属性 /// </summary> static void InitializeProperties() { //实例化生产者的服务类列表 ONSProducerServiceList = new List <object>(); //实例化消费者的服务类列表 ONSConsumerServiceList = new List <object>(); //实例化生产者列表 ONSProducerList = new List <IONSProducer>(); //实例化消费者列表 ONSConsumerList = new List <IONSConsumer>(); //实例化Executer方法对应的委托实例字典 ExecuterMethodDictionary = new ConcurrentDictionary <string, MethodInfo>(); //实例化Checker方法对应的委托实例字典 CheckerMethodDictionary = new ConcurrentDictionary <string, MethodInfo>(); //* //获取当前应用域下的所有程序集 Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); //找出所有程序集下带有[ONSConsumer]特性的所有方法,并放入自定义消费者方法列表中 if (assemblies != null) { foreach (Assembly assembly in assemblies) { Type[] types = null; try { types = assembly.GetTypes(); } catch (Exception e) { //通过vs2017编译后反射会报错,需要捕捉错误。忽略此处错误即可 //Microsoft.Build.Tasks.CodeAnalysis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 //尝试获取所有类时发生异常 /* * string body = assembly.FullName + "尝试获取所有类时发生异常:" + e.ToString(); * SendDebugMail("ONSHelper.InitializeProperties方法反射时捕获异常", body); * //*/ } if (types != null) { //* foreach (Type type in types) { if (type.BaseType != null) { if (type.BaseType.FullName != null) { //原本事务消息是需要自动注册,因为ProducerService必须开发者自己实现。但是在2019年01月23日大更新后,老SDK在生成Producer时不再需要输入ProducerId了,但是TranProducer实例化时会报错。因此这里禁用事务消息功能。 //获取当前应用作为"事务"类型生产者的相关信息 CreateProducer <AbstractTranProducerService <object> >(assembly, type, ONSMessageType.TRAN, (onsProducerFactoryProperty, topic, producerId) => { //实例化ONSLocalTransactionChecker ONSLocalTransactionChecker checker = new ONSLocalTransactionChecker(); //实例化TransactionProducer TransactionProducer transactionProducer = ONSFactory.getInstance().createTransactionProducer(onsProducerFactoryProperty, checker); //实例化代理类ONSTransactionProducer return(new ONSTranProducer(topic, producerId, transactionProducer)); }); ////获取当前应用作为"顺序"类型生产者的相关信息 //CreateProducer<AbstractOrderProducerService<object>>(assembly, type, ONSMessageType.ORDER, (onsProducerFactoryProperty, topic, producerId) => //{ // //实例化OrderProducer // OrderProducer orderProducer = ONSFactory.getInstance().createOrderProducer(onsProducerFactoryProperty); // //实例化代理类ONSOrderProducer // return new ONSOrderProducer(topic, producerId, orderProducer); //}); ////获取当前应用作为"普通"类型生产者的相关信息 //CreateProducer<AbstractBaseProducerService<object>>(assembly, type, ONSMessageType.BASE, (onsProducerFactoryProperty, topic, producerId) => //{ // //实例化Producer // Producer baseProducer = ONSFactory.getInstance().createProducer(onsProducerFactoryProperty); // //实例化代理类ONSProducer // return new ONSBaseProducer(topic, producerId, baseProducer); //}); //获取当前应用作为"事务"类型消费者的相关信息 CreateConsumer <AbstractTranConsumerService <object> >(assembly, type, ONSMessageType.TRAN, (onsConsumerFactoryProperty, topic, consumerId, classType) => { //实例化PushConsumer PushConsumer pushConsumer = ONSFactory.getInstance().createPushConsumer(onsConsumerFactoryProperty); //实例化代理类ONSTransactionConsumer return(new ONSTranConsumer(topic, consumerId, pushConsumer, classType)); }); //获取当前应用作为"顺序"类型消费者的相关信息 CreateConsumer <AbstractOrderConsumerService <object> >(assembly, type, ONSMessageType.ORDER, (onsConsumerFactoryProperty, topic, consumerId, classType) => { //实例化OrderConsumer OrderConsumer orderConsumer = ONSFactory.getInstance().createOrderConsumer(onsConsumerFactoryProperty); //实例化代理类ONSOrderConsumer return(new ONSOrderConsumer(topic, consumerId, orderConsumer, classType)); }); //获取当前应用作为"普通"类型消费者的相关信息 CreateConsumer <AbstractBaseConsumerService <object> >(assembly, type, ONSMessageType.BASE, (onsConsumerFactoryProperty, topic, consumerId, classType) => { //实例化PushConsumer PushConsumer pushConsumer = ONSFactory.getInstance().createPushConsumer(onsConsumerFactoryProperty); //实例化代理类ONSTransactionConsumer return(new ONSBaseConsumer(topic, consumerId, pushConsumer, classType)); }); } } } //*/ } } } //*/ }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(PushConsumer obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }