Hi,
I'd like to run a scenario past the group to gather some thoughts on an appropriate MT/RMQ setup for our system.
We currently have large collections of SSIS packages all connected together via SQL Agent jobs, steps to call other packages, and polling schedule databases to check progress and trigger actions. It's unwieldy to say the least!
These collections (we call them 'builds') have to be duplicated, modified extensively, extended and re-deployed (manually!) for each new customer we gain. To make things more complex, there's an awful lot of data being moved around during each build and many long-running imports, exports, queries and procedures. A single execution of one build may take 2-3 days, and we're lucky if an individual step within a build takes less than a few hours.
We need to untangle this and I want to start by turning some of the simple steps into services. For example, many of the builds compress/decompress archive files (some small, some 6GB, compressed -- so that'll take a while too).
I'm thinking of an ArchiverService which consumes messages containing requests to perform archive actions ('zip this', 'unzip that', etc). We'd have several instances of this service so we can run tasks in parallel across hosts.
Things are made rather more complex by the fact that the client of this service will be SQL Server 2008 SSIS packages. I could write a MassTransit package step, but they have to target .NET 3.5 for SSIS 2008 which is too old for MT. I thought I'd get around that by building a WebAPI with SignalR support so I could build an SSIS step which calls and listens to the MT bus via SignalR.
So what I'm imagining is:
- An ArchiverService running as an MT consumer
- The ArchiverService pushes progress and completion information back to its requesters (what's the best mechanism for this?)
- A standalone Publisher assembly that can be used by non-SSIS clients to push requests to the ArchiverService and that'll raise events to its calling application based on responses from the ArchiverService
- A WebAPI that can also use the Publisher assembly to communicate with services
- A SignalR interface to that API
- A custom SSIS build component that allows publishing of messages via the SignalR interface and will raise events within the package to drive progression through the package.
Does this seem sane? Or if not sane, then possible?
Any and all advice welcome!
Thanks,
Chris