Skip to content

Spring integration with Azure Messaging design doc

Warren Zhu edited this page Sep 30, 2018 · 11 revisions

Introduction

Azure provides multiple messaging services but with various usage scenario and different API. Some popular ones are storage queue, service bus queue and topic and event hub. Customers may start with a simple one with lower throughput, then switch a more advanced and sophisticated one which provides high throughput and dynamic load balancing. Current each message service SDK has its own message format and inconsistent sending and receiving semantics, which makes a steep learning curve and high migration cost to new technologies. So when thinking about how to make Spring integration with Azure message service smoothly, we try to provide a uniform message interface and consistent messaging semantics with Spring.

Design goal

  1. Uniform message interface provided by Spring. Spring Message interface is used for all services for sending and receiving. For each service, we provides message converter to convert between Spring message and azure service specific message format. You also can provide your custom message converter.
  2. Consistent message semantics defined by clearly separated interface. We provides SendOperation, SubscribeOperation and SubscribeOperation. Different message service implement supported function through its message template.
  3. Different level of abstraction. The lower level you operate at, you have less dependency and more control. From lower to higher, we provides Template, ChannelAdapter with Spring Integration and Binder with Spring Cloud Stream.