[英]How to configure different table names in NserviceBus/Persistence SQL instance:
[英]How to query Sagas stored in SQL Persistence table
我需要查詢 Saga Data 類的屬性以獲取列表。 它作為序列化對象存儲在 SqlPersistance 表 [Data] 列上。 考慮一個場景,我的 SagaData 有一個名為 UserName 的屬性,所以我想查詢與該用戶相關的每個 saga。 以一種草率的方式,我可以查詢列內容,獲取列表並可以從內容中創建 Saga 對象,方法如下:
SELECT [Id]
,[Correlation_TaskId]
,[Metadata]
,[Data]
,[PersistenceVersion]
,[SagaTypeVersion]
,[Concurrency]
FROM [myWonderfulDb].[dbo].[MyWonderfulPeristanceTable]
where JSON_VALUE(Data,'$.Username') = 'arthur'
但我正在尋找一種可能使用 NserviceBus API 的優雅方式來做到這一點。 ParticularSoftware 文檔(鏈接: https ://docs.particular.net/persistence/sql/saga-finder)中描述了一個 SagaFinder 實現,但這僅返回一個不完全適合我的場景的對象。
這里是如何在文檔中實現的:
class SqlServerSagaFinder :
IFindSagas<MySagaData>.Using<MyMessage>
{
public Task<MySagaData> FindBy(MyMessage message, SynchronizedStorageSession session, ReadOnlyContextBag context)
{
return session.GetSagaData<MySagaData>(
context: context,
whereClause: "JSON_VALUE(Data,'$.PropertyPathInJson') = @propertyValue",
appendParameters: (builder, append) =>
{
var parameter = builder();
parameter.ParameterName = "propertyValue";
parameter.Value = message.PropertyValue;
append(parameter);
});
}
}
任何想法表示贊賞。 謝謝!
我們有關於查詢 saga 狀態的指南,請訪問
https://docs.particular.net/nservicebus/sagas/#querying-saga-data
簡而言之,您可以查詢 saga 數據,NServiceBus 沒有提供開箱即用的方式,因為我們建議使用不同的方法:
saga 發布包含所需數據的事件,並具有處理這些事件的處理程序,並將數據存儲在一個或多個讀取模型中以供查詢。
我們不推薦它的主要觀點在我看來是這兩點
- 通過將數據暴露在 saga 中業務邏輯的保護措施之外,風險在於數據不被視為只讀。 最終,一個組件試圖繞過 saga 並直接修改數據。
- 查詢數據可能需要額外的索引、資源等,這些需要由發出查詢的組件管理。 這些額外的資源會影響 saga 的性能。
SagaFinder的唯一目的是找到與傳入消息相關的某個 saga 的單個實例。 我不知道查詢 saga(數據)實例的任何框架功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.