I’ve been spending a lot of time working on a service bus. I have a lot of goals for it; they’re all based on it being extremely simple. When you unzip it, you can launch the executable and be up and running without any additional configuration. There will be a lot you can do and should do, but nothing will be required to get started.
The bus contains one or more nodes which exists in one or more processes on one or more machines. You can drag and drop containers and individual packages from one node to another; it will continue to exist in the old node until all pending requests are complete. In the meantime, the broker will switch to the new one for new requests.
Each node contains services that the node needs. 4 of them are shown above;
- Wcf Host Service – manages all of the Wcf endpoints.
- App Domain Host Services – every package runs in its own app domain. Additionally, temporary app domains are used to explore all of the assemblies in a particular folder to determine what things should be auto-started. (Currently, self starts include Subscribers. Wcf services are next)
- The container service manages all of the containers in the node. A container is a home for a package. A package can contain one or more pieces of functionality; publisher, subscriber, Wcf service, etc
- Folder service – When a package is deployed, it is deployed to a folder. The folder service keeps track of what folders have been created and why
Each bus service can be decorated with an attribute that identifies a Wcf admin service. The screenshot shows that the Wcf Host Service and Container Service each have an admin service. Node service is also an admin service, but its admin for the node itself, not a particular service.
Currently, the containers node is empty. I’m converting that to retrieve the container info remotely.
The very early stages of the pub-sub are in there, but it only works on the local node.
I’ve been focusing on the client for the last couple days. Some of the things in the screen shot are built from references to the server object. Others are retrieved via Wcf. It should be via Wcf, so I’m moving them over. To facilitate that, I had to start building the client. (You can create any old Wcf client for the service, but I wrapped it up with some bus specific functionality.)
I’m pretty excited about this project. Let’s see how it goes. So far, I’m very pleased with its progress.
More to come.