Dreamine.Hybrid 1.0.3
Dreamine.Hybrid 프로젝트의 API와 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus 클래스 참조sealed

더 자세히 ...

Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus에 대한 상속 다이어그램 :
Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus에 대한 협력 다이어그램:

클래스

class  SubscriptionBucket
class  Subscription

Public 멤버 함수

async Task PublishAsync< TMessage > (TMessage message, CancellationToken cancellationToken=default)
IDisposable Subscribe< TMessage > (Func< TMessage, CancellationToken, Task > handler)

속성

IHybridMessageBusExceptionHandler ExceptionHandler [get, set]

Private 멤버 함수

void Unsubscribe (Subscription subscription)

Private 속성

readonly ConcurrentDictionary< Type, SubscriptionBucket_subscriptions = new()
volatile IHybridMessageBusExceptionHandler _exceptionHandler

상세한 설명

메시지 형식별 구독자를 스레드 안전하게 관리하는 IHybridMessageBus 인메모리 구현입니다.

InMemoryHybridMessageBus.cs 파일의 19 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ PublishAsync< TMessage >()

async Task Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus.PublishAsync< TMessage > ( TMessage message,
CancellationToken cancellationToken = default )
inline

현재 스냅숏에 포함된 구독자에게 메시지를 순서대로 비동기 게시하며 개별 구독자 실패를 격리합니다.

템플릿 파라메터
TMessage게시할 메시지 형식입니다.
매개변수
message게시할 메시지입니다.
cancellationToken남은 전달을 중단하는 취소 토큰입니다.
반환값
현재 구독자에게 전달하는 작업입니다.
예외
ArgumentNullExceptionmessagenull인 경우 발생합니다.

Dreamine.Hybrid.Interfaces.IHybridMessageBus를 구현.

타입 한정자들
TMessage :IHybridMessage 

InMemoryHybridMessageBus.cs 파일의 111 번째 라인에서 정의되었습니다.

114 : IHybridMessage
115 {
116 if (message is null)
117 {
118 throw new ArgumentNullException(nameof(message));
119 }
120
121 if (!_subscriptions.TryGetValue(typeof(TMessage), out SubscriptionBucket? subscriptions))
122 {
123 return;
124 }
125
126 Subscription[] snapshot = subscriptions.CreateSnapshot();
127
128 foreach (Subscription subscription in snapshot)
129 {
130 if (cancellationToken.IsCancellationRequested)
131 {
132 return;
133 }
134
135 if (subscription.IsDisposed)
136 {
137 continue;
138 }
139
140 if (subscription.Handler is not Func<TMessage, CancellationToken, Task> handler)
141 {
142 continue;
143 }
144
145 try
146 {
147 await handler(message, cancellationToken).ConfigureAwait(false);
148 }
149 catch (OperationCanceledException) when (cancellationToken.IsCancellationRequested)
150 {
151 return;
152 }
153 catch (ObjectDisposedException)
154 {
155 subscription.Dispose();
156 }
157 catch (InvalidOperationException)
158 {
159 subscription.Dispose();
160 }
161 catch (NullReferenceException)
162 {
163 /*
164 * Blazor Server / SignalR circuit가 아직 준비되지 않았거나,
165 * 이미 해제된 컴포넌트가 메시지를 수신할 때 발생할 수 있다.
166 *
167 * 메시지 버스는 한 구독자 실패 때문에 전체 publish를 중단하면 안 된다.
168 * 해당 구독은 더 이상 안전하지 않다고 보고 제거한다.
169 */
170 subscription.Dispose();
171 }
172 catch (Exception ex)
173 {
174 // Individual subscriber failure must not stop delivery to remaining subscribers.
175 // Delegate to the configured handler so callers can observe the failure
176 // (e.g. by wiring a logging-backed handler) without coupling this assembly
177 // to a concrete logger. Default handler is a no-op.
178 _exceptionHandler.Handle(ex, typeof(TMessage));
179 }
180 }
181 }

다음을 참조함 : _exceptionHandler, _subscriptions, Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus.Subscription.Dispose(), Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus.Subscription.Handler, Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus.Subscription.IsDisposed.

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ Subscribe< TMessage >()

IDisposable Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus.Subscribe< TMessage > ( Func< TMessage, CancellationToken, Task > handler)
inline

지정한 메시지 형식의 비동기 처리기를 등록합니다.

템플릿 파라메터
TMessage구독할 메시지 형식입니다.
매개변수
handler메시지 처리 대리자입니다.
반환값
해제 시 처리기를 제거하는 구독입니다.
예외
ArgumentNullExceptionhandlernull인 경우 발생합니다.

Dreamine.Hybrid.Interfaces.IHybridMessageBus를 구현.

타입 한정자들
TMessage :IHybridMessage 

InMemoryHybridMessageBus.cs 파일의 223 번째 라인에서 정의되었습니다.

225 : IHybridMessage
226 {
227 if (handler is null)
228 {
229 throw new ArgumentNullException(nameof(handler));
230 }
231
232 Type messageType = typeof(TMessage);
233 var subscription = new Subscription(messageType, handler, Unsubscribe);
234
235 while (true)
236 {
237 SubscriptionBucket subscriptions = _subscriptions.GetOrAdd(
238 messageType,
239 _ => new SubscriptionBucket());
240
241 if (subscriptions.TryAdd(subscription))
242 {
243 return subscription;
244 }
245
246 _subscriptions.TryRemove(
247 new KeyValuePair<Type, SubscriptionBucket>(messageType, subscriptions));
248 }
249 }

다음을 참조함 : _subscriptions, Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus.SubscriptionBucket.TryAdd(), Unsubscribe().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ Unsubscribe()

void Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus.Unsubscribe ( Subscription subscription)
inlineprivate

지정한 구독을 메시지 형식 버킷에서 제거하고 빈 버킷을 닫습니다.

매개변수
subscription제거할 구독입니다.

InMemoryHybridMessageBus.cs 파일의 267 번째 라인에서 정의되었습니다.

268 {
269 if (subscription is null)
270 {
271 return;
272 }
273
274 if (!_subscriptions.TryGetValue(subscription.MessageType, out SubscriptionBucket? subscriptions))
275 {
276 return;
277 }
278
279 subscriptions.Remove(subscription);
280
281 if (subscriptions.TryCloseIfEmpty())
282 {
283 _subscriptions.TryRemove(
284 new KeyValuePair<Type, SubscriptionBucket>(subscription.MessageType, subscriptions));
285 }
286 }

다음을 참조함 : _subscriptions, Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus.Subscription.MessageType.

다음에 의해서 참조됨 : Subscribe< TMessage >().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ _exceptionHandler

volatile IHybridMessageBusExceptionHandler Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus._exceptionHandler
private
초기값:

exception Handler 값을 보관합니다.

InMemoryHybridMessageBus.cs 파일의 38 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : PublishAsync< TMessage >().

◆ _subscriptions

readonly ConcurrentDictionary<Type, SubscriptionBucket> Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus._subscriptions = new()
private

subscriptions 값을 보관합니다.

InMemoryHybridMessageBus.cs 파일의 29 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : PublishAsync< TMessage >(), Subscribe< TMessage >(), Unsubscribe().

속성 문서화

◆ ExceptionHandler

IHybridMessageBusExceptionHandler Dreamine.Hybrid.Messaging.InMemoryHybridMessageBus.ExceptionHandler
getset

구독자가 예기치 않은 예외를 발생시켰을 때 호출할 처리기를 가져오거나 설정합니다. 기본값은 무동작 NullHybridMessageBusExceptionHandler.Instance입니다.

예외
ArgumentNullException설정할 처리기가 null인 경우 발생합니다.

InMemoryHybridMessageBus.cs 파일의 57 번째 라인에서 정의되었습니다.

58 {
59 get => _exceptionHandler;
60 set => _exceptionHandler = value ?? throw new ArgumentNullException(nameof(value));
61 }

이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: