Notification Infrastructure
A colleague asked:
How can I build a notification infrastructure?
And here's my answer:
Patterns
Do you know of any patterns and/or pattern languages?
Of course, I'm rather partial to the material in Enterprise Integration Patterns, such as Publish-Subscribe Channel
, Event Message
, and Durable Subscriber
.
I've become interested in and started documenting Event-Driven Architecture, which includes some links to some stuff of Gregor's, including a good paper, "Programming Without a Call Stack - Event-driven Architectures."
I found the specs for WS-Notification
surprisingly helpful for making me think about different pub/sub issues and ways to approach it, including brokers which store messages so that subscribers can poll for them (a pull model instead of the usual pub/sub push model). It's just a spec, so you can't run it; but because it's a spec, I like its focus on what you're trying to do without getting bogged down in how you're going to do it.
Specifications
What are the specifications/standards for notification?
Specifications:
WS-Notification seems to be mostly an IBM thing, though lots of other vendors seem to be participating. WS-Eventing seems to be mostly a Microsoft thing; it has a reputation for being simpler than WS-Notification. WS-EventNotification is an effort lead by HP to create a merger of WS-Notification and WS-Eventing that everyone (including Microsoft) supports; like WS-Eventing, WS-EventNotification is simpler and less-capable than WS-Notification. Products that implement WS-Notification or WS-Eventing should also be able to implement WS-EventNotification without too much trouble.
Open Source
Do you know of any solid C# open source implementations of this concept?
That I know less about. I know WebSphere Application Server v6.1 implements WS-Notification
. I know that WebSphere MQ supports C#
as well as publish/subscribe
. However, neither of those are remotely open source or free.
In general, messaging systems like WebSphere MQ and WebSphere Message Broker work well within an enterprise--where you can make sure everyone has the same product installed and no one is blocked from the products by firewalls--but not between enterprises (B2B
). Web services work better between enterprises, and so you'll probably be better off with a solution based on WS-Notification, WS-Eventing, and/or WS-EventNotification.