小编jop*_*opa的帖子

当它超时时,我们如何避免多个 Rebus 消息?

我们使用 Rebus 作为 Sql 服务器的队列系统。对于不同类型的消息,我们有多个收件人。每条消息都可以由特定类型的多个工作人员处理。一条消息只能由一名工人处理/处理(第一个拉出它的工人)。如果工作人员由于某种原因无法完成它,它会使用超时服务推迟消息。

如果我理解正确,它就会变成一个 TimeoutRequest 并放入超时表中。当需要重新运行时,它会在作为原始消息重新引入队列之前变成 TimeoutReply。

我们遇到的问题是,当它变成 TimeoutReply 时,所有工作人员都会拿起它并创建原始消息。当超时时,一条原始消息变成多条消息(与工作人员一样多)。

我们的 Rebus 设置如下:

“服务器端”:

        var adapter = new BuiltinContainerAdapter();
        Configure.With(adapter)
            .Logging(l => l.Log4Net())
            .Transport(t => t.UseSqlServerInOneWayClientMode(connectionString).EnsureTableIsCreated())
            .CreateBus()
            .Start();

        return adapter;
Run Code Online (Sandbox Code Playgroud)

“工人方面”:

        _adapter = new BuiltinContainerAdapter();
        Configure.With(_adapter)
            .Logging(l => l.Log4Net())
            .Transport(t => t.UseSqlServer(_connectionString, _inputQueue, "error")
                .EnsureTableIsCreated())
            .Events(x => x.AfterMessage += ((bus, exception, message) => SendWorkerFinishedJob(exception, message)))
            .Events(x => x.BeforeMessage += (bus, message) => SignalWorkerStartedJob(message))
            .Behavior(x => x.SetMaxRetriesFor<Exception>(0))
            .Timeouts(x => x.StoreInSqlServer(_connectionString, "timeouts").EnsureTableIsCreated())
            .CreateBus().Start(numberOfWorkers);
Run Code Online (Sandbox Code Playgroud)

非常感谢在解决问题或提供理解方面的任何帮助!

.net c# message-queue rebus

5
推荐指数
1
解决办法
1042
查看次数

如何使用 simple.odata.client 扩展分层数据

在我们的数据模型中,我们有分层数据。例如,我们有以下结构:

Product  : Category       (one to many)
Category : CategoryType   (one to many)
Run Code Online (Sandbox Code Playgroud)

如果我们想要某个产品的相关类别以及每个类别的相关类别类型,我们可以使用这样的 url 来构建它:

<urlbase>/Products(1)?$expand=Category($expand=CategoryType)
Run Code Online (Sandbox Code Playgroud)

这在浏览器中工作正常。问题是如何在 simple.odata.client OData v4 中做到这一点?我们正在尝试这个,但没有让它工作:

var client = new ODataClient(ConfigSettingsProvider.ODataBaseUri);
var client
    .For<Product>()
    .Filter(p=> p.Id == 1)
    .Expand(p => p.Categories)
    .Expand(c => c.CategoryTypes)
    .FindEntriesAsync();
Run Code Online (Sandbox Code Playgroud)

c# odata simple.odata.client

3
推荐指数
1
解决办法
3737
查看次数

标签 统计

c# ×2

.net ×1

message-queue ×1

odata ×1

rebus ×1

simple.odata.client ×1