1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- using StackExchange.Redis;
- using System;
- using VCommon.Logging;
- using VCommon.Services;
- namespace VCommon.PubSub
- {
- public abstract class Subscriber : PubSubBase, IService
- {
- protected Subscriber(string server, string channelName) : base(server, channelName)
- {
- }
- private void OnMessageArrival(RedisChannel channel, RedisValue content)
- {
- Logger.Trace($"{nameof(PubSub)}:{nameof(Subscriber)} Event", new { ChannelName, Content = (string)content });
- try
- {
- HandleEvent(content);
- }
- catch (Exception exception)
- {
- Logger.Error($"{nameof(PubSub)}:{nameof(Subscriber)} Error on handling event", new { ChannelName, exception });
- }
- }
- public override void Dispose()
- {
- Stop();
- base.Dispose();
- }
- protected abstract void HandleEvent(string message);
- public void Start()
- {
- Logger.Trace($"{nameof(PubSub)}:{nameof(Subscriber)} Start", ChannelName);
- Conn.GetSubscriber().Subscribe(ChannelName, OnMessageArrival);
- }
- public void Stop()
- {
- Logger.Trace($"{nameof(PubSub)}:{nameof(Subscriber)} Stop", ChannelName);
- Conn.GetSubscriber().Unsubscribe(ChannelName, OnMessageArrival);
- }
- }
- }
|