-
Notifications
You must be signed in to change notification settings - Fork 46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Decouple ServiceControl from the endpoints transport #871
Comments
@Particular/servicecontrol-maintainers consider this issue for the maintainer budget. |
Here is my take on the answers:
|
I agree. But I still think we'll need some queue in front of ServiceControl. That's why SC needs to use some kind of queue mechanism. When using the adapter approach, we initially have two buffers, on the user side and on the SC side. Then, gradually, we can eliminate the buffers on the SC side, leaving only the queues in front of the adapter
I don't think this is so black-and-white. While moving the messages directly to the endpoint where they failed has some advantages, it has also some problems e.g. a failed message would have to contain a stable TCP address of the process (IP + Port) or we need to maintain some kind of mapping between queue addresses and TCP addresses. |
My take:
|
@mikeminutillo I would like to start working on this. I've raised #872 as a first step. |
Pretty sure I like this :) |
Closing as outdated. |
Why decouple?
Reduce the development testing effort by limiting the number of transports supported in ServiceControl. The adapter between the user transport and the SC would be used even when both sides use same infrastructure in order to avoid problems e.g. with incompatible routing technologies
What transports should be supported?
Initially we can limit the support to MSMQ only both on premise and in the cloud. The reason why is the fact that SC currently requires a custom VM anyway (because of embedded RavenDB) so installing MSMQ locally would not be a problem. Ultimately we should also support one of the cloud-native transports (e.g. ASB on Azure and SQS on AWS).
What are the immediate benefits?
There are numerous benefits when going with the adapter approach, some of them available immediately
What are the long-term benefits?
How would we go about releasing it?
Introducing adapters does not change the data format of SC so it does not require data migrations. Apart from the changes in the handling of integration events, the new version of SC is compatible in the sense it can also work directly, without the adapter in front of it.
Initially the new release would support all the currently supported transport in order to give users time to migrate. We would inform the users that in months we would stop supporting some transports (e.g. RabbitMQ) and that by this data they need to put in an adapter and switch their SC to one of the supported transports.
Issues solved
Show me da codez
Can I actually see it?
There is a video showing it work. You can also run the projects in
RabbitMq
orSqlServer
(or both simultaneously) in the adapter solution while using SC from the mentioned PR. Messages randomly fail processing and you can retry them in SC. Some endpoints also include specialized integration endpoints that process SC's notifications.The text was updated successfully, but these errors were encountered: