我目前正在从事一个项目,该项目允许第三方连接到我们产品的消息代理。任务是提供一个第三方可以使用的库。我希望能够将公共交通或NServiceBus与之一起打包,但我希望将该细节隐藏在接口后面。
我把服务车藏起来了。。。
public class MyServiceBus : IServiceBus {
private readonly MassTransit.IBus _bus;
private readonly MassTransit.IBusControl _busControl;
public PanelSawServiceBus(MassTransit.IBus bus, MassTransit.IBusControl busControl) {
_bus = bus;
_busControl = busControl;
}
public Task PublishAsync<T>(T message, CancellationToken token = default(CancellationToken)) where T : class =>
_bus.Publish(message, token);
public Task SendAsync<T>(T message, CancellationToken token = default(CancellationToken)) where T : class =>
(_bus as ISendEndpointProvider)?.Send(message, token);
public Task StartAsync() => _busControl.StartAsync();
public Task StopAsync() => _busControl.StopAsync();
}
供应商不应该被允许发布/发送消息,而应该只消费。如何隐藏消息的消费,以便打包服务总线库而不暴露正在使用的库?
编辑1使用大众交通消费消息如下所示
public class MyConsumer : IConsumer<SomeMessage> {
public Task Consume(ConsumeContext<SomeMessage> ctx) => Task.CompletedTask;
}
在引导过程中,当您创建服务总线实例时,您可以定义您的消费者(当您收到消息时,公共交通将构建消费者)。
var busControl = Bus.Factory.CreateUsingInMemory(config => {
config.ReceiveEndpoint("queue_name", endpointCfg => {
endpointCfg.Consumer<MyConsumer>();
}
};
我希望包装器能让开发人员说“使用队列工厂,我想用这个队列名称构造一个实例,下面是实现隐藏总线技术接口的使用者接口的类型名称。”我只是不知道我是否可以隐藏消费者。
如果我理解正确的话,您希望避免代码耦合到NServiceBus或MassTransit,并且不想公开您正在使用的代码。
首先,解耦:
您已经通过定义自己的IServiceBus
接口完成了部分工作。只要您的库只依赖于该接口而不依赖于任何实现,您就不应该耦合到任何一个。
为了确保避免这种耦合,我将在单独的项目/库中保留具体的实现。您的“核心”域也不应直接引用。如果您可以在没有任何具体实现的情况下对代码进行单元测试,那么您可以在实现之间自由切换。
发布库时,可以发布核心库的组成以及所选接口的实现。
然后,隐藏使用的实现:
至于不公开您使用的是NServiceBus
还是MassTransit
,您不能。如果有人引用了您的库并且它依赖于其中一个包,他们也必须添加该包。假设您的库是为NuGet打包的,该包将揭示其依赖关系。
我正在尝试通过APIM向服务总线队列发送消息。我已经阅读了几篇类似下面的文章,但运气不佳https://connectedcircuits.blog/2018/09/25/exposing-azure-service-bus-through-apim-generating-a-sas-token-and-setting-the-session-id/ https://www.serverlessn
我使用的是Oracle Service Bus11g第1版(11.1.1.3),但它的XPath实现有问题。 ..但它不是: 执行XQuery时出错:{bea-err}sys001:此功能尚未实现(对不起)
有人能解释一下新发布的WindowsServiceBus(内部部署,而不是Azure)和NServiceBus之间的区别吗? 寻找详细的答案什么窗口SB可能会丢失,因为我很熟悉NSErviceBus可以做什么: 它是真正的服务总线,而不仅仅是使用队列的消息代理吗? 是否可以支持消息多态?(消息子类化其他消息和支持此层次结构的处理程序 长时间运行的进程和相关性 向外扩展
问题内容: 考虑以下情况, 在上面的例子中我得到以下输出这是 相当 期待。 我一直在阅读有关默认方法的信息, 尤其是 关于扩展包含默认方法的接口的信息 2 第二子弹:重新声明的默认方法,这使得它的抽象。 在上面的示例中,我有两个接口的默认方法具有相同的名称,并且当我实现这两个接口时,我只能实现对的引用。 我对此几乎没有疑问, 我怎样才能 到达 的方法 和 如果我不能比,为什么? 没有这种行为从本质
UnMarshalException:解封返回时出错;嵌套异常为:java.lang.ClassNotFoundException:seht.somePackage.supernode(没有安全管理器:RMI类加载器禁用)位于sun.RMI.server.unicastRef.Invoke(未知源)位于java.RMI.server.RemoteObjectInvocationHandler.In
我有一个前台服务,按下按钮后会显示一个窗口。有没有办法隐藏(或过度隐藏)服务窗口显示屏上的系统状态栏?有我可以用的旗子吗?我试着到处找,但运气不好。