Particular / Workshop

SOA Done Right
Apache License 2.0
582 stars 224 forks source link

Change MSMQ to RabbitMQ #185

Open alexeyzimarev opened 6 years ago

alexeyzimarev commented 6 years ago

MSMQ only works on Windows and I seriously doubt most people will use it in production anyway. I would suggest using RabbitMQ instead and include instructions to get/run it in a Docker container, since this would simplify the setup and will allow using macOS and Linux for the workshop.

adamralph commented 6 years ago

@alexeyzimarev thanks for raising this. It's an interesting proposition. One thing that we have to bear in mind is that we still want to support the use of VS 2015 for now, which means we have to stick to the old-style verbose csproj format for now, which AFAIK cannot be used in an IDE on non-Windows OS's (correct me if I'm wrong?). Having said that, we would like to move to the new SDK-style csproj ASAP, and we'll be keeping a close eye on the requirement to keep supporting VS 2015, to see when we can drop it.

alexeyzimarev commented 6 years ago

Rider and MonoDevelop (which also means VS for Mac, but I have not tested) supports any type of csproj file. Full framework projects also run fine on Mono. VS 2015 by the way supports new csproj files with Update 3.

But even with the old format, which is in fact, #182, using RabbitMQ will at least enable people to run Mono apps. MSMQ is the biggest issue (among with the mammoth of SQL Server).

dvdstelt commented 6 years ago

I'd rather then change to the Learning Transport, which would then rule out using the platform tools like ServiceControl. So not ideal either.

I'm no expert on Docker, but afaik it needs hyper-v on Windows and that means Windows Home won't work. That would mean Windows attendees would have an additional prerequisite to run Windows Pro at the least. Also not ideal.

It is indeed an interesting proposition, but I'm not sure it's as easy as it sounds?

alexeyzimarev commented 6 years ago

May be not, but I don't know the Learning Transport. I know that RMQ can provide great insights about exchanges and queues, which is very useful for learning how things work.

Speaking from experience - I have done the MassTransit three-hours workshop three times. Never had a single person running Windows Home. It is a question of priorities. I'd rather support the growing number of people using non-Windows environments, than a hypothetical Windows Home user.

adamralph commented 6 years ago

I'd rather avoid the use of Mono for the workshop exercises. NServiceBus is neither tested nor officially supported on Mono and it would come at the risk of causing us a lot of overhead during the workshop. As long as we want to support VS 2015 then we cannot switch to .NET Core, which mean Windows is also going to remain a prerequisite until then. When we decide to drop support for VS 2015 then we can revisit this issue.

alexeyzimarev commented 6 years ago

Ok, even if you rule out Mono, VS 2015 Update Whatever supports .NET Core. I would still change MSMQ to RMQ, this does not require any changes in project structure or platform.

mauroservienti commented 6 years ago

As far as I can remember VS2015 supports only .NET Core 1.x

alexeyzimarev commented 6 years ago

We are discussing #182 actually, not this issue :) I closed it.

mauroservienti commented 6 years ago

I'd rather go with the learning transport, that implies zero friction and is fully F5 compliant. I remember we discussed dropping MSMQ in favor of the learning transport (or any other brokered transport for the sake of the discussion) before, IIRC the reason why MSMQ was left in place is due to the routing configuration when it comes to events.

Given that with MSMQ subscriptions are message driven they require an explicit routing configuration. By moving to a brokered transport with native support for pub/sub we realized that the transition for users that want to use MSMQ (and we have many) would have been much harder.

I'm not opposed to this change, probably it's enough to point to the documentation we have.

dvdstelt commented 6 years ago

I thought we didn't move to LearningTransport because of ServiceControl?

mauroservienti commented 6 years ago

That can be solved by a transport adapter, but when we discussed MSMQ/Brokered we weren't discussing ServiceControl yet. Anyway The monitoring experience is a blocker for the learning transport.

Once we can support containers a docker-compose file will solve all this pain and we can configure solutions to just deploy a Rabbit container along with endpoints.

jbogard commented 6 years ago

I'm not a big fan of the learning transport for this, because it feels a lot more "real" when you're using an actual transport. In the last few classes, I've just demoed RabbitMQ transport because it's good to have a contrast of broker-based transports.

adamralph commented 6 years ago

Given that people often come in with corporate laptops, is Docker a reasonable pre-requisite?

alexeyzimarev commented 6 years ago

Well, say, either Docker and RMQ image, or RMQ installed. They need to develop somehow.

dvdstelt commented 6 years ago

I'm not a big fan of the learning transport for this, because it feels a lot more "real" when you're using an actual transport.

I'm not sure I agree, because we promote workshop is technology agnostic. Besides that we abstract away both the learning transport, rabbitmq and any other. I know there are differences, but if you don't look at configuration and just focus on sending, publishing and processing messages and the concepts behind the workshop, why would any other transport make a difference?

Besides the fact that I see a lot of people struggle setting up Docker on Windows, including myself. It took me quite a while before I had it running. And searching the internet for solutions, I wasn't the only one having issues. It could result in people not being able to do the exercises because they don't have Docker installed.

jbogard commented 6 years ago

When I teach the workshop, I explicitly talk about differences between the different transports, MSMQ and brokers. I even convert an exercise to RabbitMQ, open up the management UI and show what’s going on. The slides only cover MSMQ. The audience, when I ask, mainly looks to use brokers. That’s a big reason for me. It’s a decision that has to be made early and is difficult to change once you’re in production.

And while the API is the same, your production code does need to change based on transport. You can’t use outbox in anything but inside a host, for example.

On Thu, Jan 25, 2018 at 3:41 AM Dennis van der Stelt < notifications@github.com> wrote:

I'm not a big fan of the learning transport for this, because it feels a lot more "real" when you're using an actual transport.

I'm not sure I agree, because we promote workshop is technology agnostic. Besides that we abstract away both the learning transport, rabbitmq and any other. I know there are differences, but if you don't look at configuration and just focus on sending, publishing and processing messages and the concepts behind the workshop, why would any other transport make a difference?

Besides the fact that I see a lot of people struggle setting up Docker on Windows, including myself. It took my quite a while before I had it running. And searching the internet for solutions, I wasn't the only one having issues. It could result in people not being able to do the exercises because they don't have Docker installed.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/Particular/Workshop/issues/185#issuecomment-360413560, or mute the thread https://github.com/notifications/unsubscribe-auth/AAGYMjQCMjL8Smdbuc23fctwbkhaLDupks5tOEwwgaJpZM4Qi7K_ .

alexeyzimarev commented 6 years ago

The audience, when I ask, mainly looks to use brokers.

I think this is the key. This is why I opened this issue. Azure ServiceBus, Windows ServiceBus and RMQ are the main candidates for most people anyway. MSMQ and SQL Server are important for NServiceBus but it is becoming marginal.

dvdstelt commented 6 years ago

The slides only cover MSMQ

You are certainly right about that. That's an easier decision to make, to do something about the slides to not focus on MSMQ so much.