Tag: masstransit

为什么MassTransit消息中不允许使用结构?

MassTransit的使用者接口都希望消息模型是类而不是结构。 因为它们都是内部接口(我必须说非常好的设计),这是显示约束的通用容器类,直接取自源代码 : /// /// Declares a Consume method for the message type TMessage which is called /// whenever aa message is received of the specified type. /// public static class Consumes where TMessage : class 对于刚开始使用该技术的人来说,这不是一个问题,但这对我们来说很麻烦,因为在我们的代码库中已经有了与命令模式相关的对象,甚至在考虑使用服务总线框架之前,所以我们不得不改变了很多接口和generics类来为它们添加这个约束来与MT一起工作。 我们很幸运没有明确地拥有任何struct类型,因为这可能会导致更多(可能是不需要的)更改。 为什么它要求消息类成为一个class ? 是否可以更改它,以便库与现有代码更加无缝地连接? 我认为虽然没有添加约束,所以可能存在一些并发症。

使用MassTransit使用交换和路由密钥发布消息

我一直在看MassTransit几个星期了,我很好奇这些可能性。 但是,我似乎无法将这些概念完全正确。 预期的行为我想用路由密钥将消息发布到“直接”交换,路由密钥绑定到两个不同的队列以执行其他活动。 当我使用MassTransit尝试相同的逻辑以获得更好的可伸缩性时。 我发现MassTransit基于具有扇出类型的队列名称创建自己的交换。 通过交换和路由密钥发布消息的经典代码 using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange, “direct”); var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange, routingKey, null, body); Console.WriteLine(” [x] Sent {0}”, message); } } 有没有办法在MassTransit中使用routingkey配置直接或主题交换?

如何清除MassTransit队列?

我想在集成测试SetUp例程中删除队列中的所有消息,我该如何实现? google / intellisense-bruteforce没有运气。 如果重要 – 我正在使用RabbitMq作为传输。

了解MassTransit中的“Finalize”

我在理解Finalize()如何在MassTransit中工作时遇到了一些麻烦,特别是它是否可以在初始状态下执行。 建立: public Event CrawlCreated { get; private set; } public Event CrawlFailed { get; private set; } public State Executing { get; private set; } public State Completed { get; private set; } public State Failed { get; private set; } public WorkflowSaga() { InstanceState(x => x.CurrentState); Initially( When(CrawlCreated) .Then(HandleCrawlRequestCreated) .TransitionTo(Executing), When(CrawlFailed) .Then(HandleCrawlFailed) .TransitionTo(Failed) […]

如何通过InMemoryTestHarness成功驱动MassTransitStateMachine?

接下来: 如何编写MassTransitStateMachineunit testing? 这是一个简单的测试类(使用MS测试),用于一个名为ProcedureStateMachine的简单状态机(注意:对于我们来说,这不是一个真正的生产状态机……这只是我过去常常使用MassTransitStateMachine进行的实验..它似乎是一个方便的自成一体的地方,试验进行unit testing也是如此): [TestClass] public class ProcedureStateMachineTests { private ProcedureStateMachine _machine; private InMemoryTestHarness _harness; private StateMachineSagaTestHarness _saga; [TestInitialize] public void SetUp() { _machine = new ProcedureStateMachine(); _harness = new InMemoryTestHarness(); _saga = _harness.StateMachineSaga(_machine); _harness.Start().Wait(); } [TestCleanup] public void TearDown() { _harness.Stop().Wait(); } [TestMethod] public async Task That_Can_Start() { // Arrange // Act await […]

MassTransit和Simple Injector

我正在审查.NET的MassTransit分布式应用程序框架 。 根据网站MassTransit从一开始就建立了IoC容器的概念,并为少数更“主流”的IoC容器提供支持库。 (目前)有Nuofet包可用于Autofac,StructureMap,Castle Windsor,Ninject和Unity。 出于性能原因 ,我选择了Simple Injector作为我选择的IoC容器,但是我无法找到一个集成库,它将对Simple Injector的支持添加到MassTransit。 有没有人试过这个,让它工作,并有一些代码可以让我开始?

MassTransit saga / statemachine没有将请求响应返回给控制器

我觉得我已经接近这个工作但似乎无法让它超越线路…… 我有一个带有saga /状态机的.NET核心ASP应用程序,似乎在大多数情况下运行良好。 它: 收到请求 发布由路由单拾取的事件 当路由单完成时,它会发布一个事件 这个事件被传染了 然后,saga将请求发送给请求/响应使用者 响应回到了传奇 然后,然后我使用RespondAsync尝试将响应发送回原始呼叫控制器但是没有任何回复 我的控制器看起来像: private readonly IRequestClient _client; public async Task CreateLinkAsync([FromBody]CreateLinkRequest request) { var requestLink = new RequestLink { GroupName = $”{request.Name} Group”, Name = request.Name, LinkId = Guid.NewGuid() }; var result = await _client.Request(requestLink).ConfigureAwait(false); return Ok(); } 我的传奇的减少版本看起来像: Request(() => LinkRequest, x => x.RequestId, cfg […]

MassTransit消息错误输入

我正在尝试通过MassTransit发布的消息遇到基本类型问题。 考虑以下: [Serializable] public abstract class Event : CorrelatedBy { public Guid CorrelationId { get; set; } public abstract string EventName { get; } public override string ToString() { return string.Format(“{0} – {1}”, EventName, CorrelationId); } } [Serializable] public class PersonCreated : Event { public PersonCreated(Guid personId, string firstName, string lastName) { PersonId = personId; […]

nServiceBus,Rhino Service Bus,MassTransit – video,演示,学习资源

嘿,人们很想知道你为nServiceBus,Rhino Service Bus和MassTransit提供或了解的任何资源。 影片? 博客post? 图书? 演示项目等