Challenge Overview

 

Project Overview

The goal of this project is to produce a Spring Cloud Stream binder for IBM MQ.

Competition Task Overview

This challenge should implement a Spring Cloud Stream binder for IBM MQ.

The architecture of the Spring Cloud binder for IBM MQ should follow the existing patterns and best practice set out in the existing binders for RabbitMQ using the binder SPI.

The Spring Cloud Stream IBM MQ binder should provide all capabilities, where applicable, present in the existing binders for RabbitMQ. RabbitMQ can therefore be used as a reference implementation and possibly being the closest comparison in terms of messaging technology.

The IBM MQ binder should address the following aspects/features specifically in relation to IBM MQ:

Transactionality (both local and distributed (XA)
Support for both queues and topics
The implementation strategy should take into account:

Mapping to existing queues or topics
Automatically creating (based on binding destination name) non existent topics

MQ header functionality and best practices respected and propagated correctly
Authentication and encrypted transport layer support

To support dynamic binder mapping (automatically creating new topics) the use of the native MQ libraries will probably be needed (can be supplied on demand).

Acceptance Criteria

The following points would validate that the implementation is correct and feature complete:

Using the binder is consistent with the other existing binders. I.e. add a starter dependency and configure via the usual Spring Boot configuration options.
Most, if not all, Spring Cloud Stream modules should work out of the box with the MQ binder
For example, a Source, Processor and Sink application should be able to execute successfully using the MQ binder implementation
There should be a full complement of unit and integration tests for the binder implementation using JUnit 4 and optionally Mockito in addition to the Spring testing projects. See the reference binders for examples
The project structure should follow the standard set out in the reference binders
The source code should pass our Checkstyle checks (detailed below)

Code Quality and Conventions

  • Checkstyle will be used to enforce basic code quality and formatting consistency. The Checkstyle Maven plugin with a custom check file is already configured for use in the project.
  • All commits should be preceded by running mvn checkstyle:check and making sure any violations are addressed.

Note

The following should be kept in mind:

The concepts and thorough understanding of Spring 4+, Spring Boot, Spring Cloud Stream and IBM MQ are left to the developer
It is implied that the runtime would be Spring Boot with Java 8 JDK (should support both OpenJDK and Oracle JDK)

Technology Overview

  • Java 8
    Maven 3.3.9

     


Final Submission Guidelines

 

Submission Deliverables

Source Code
Deployment Guide
Verification Steps

Environment Setup

When developing and testing the Spring Cloud Stream IBMQ MQ binder, a running MQ environment will be required. The easiest way to stand up a MQ queue manager is by using the IBM MQ Advanced for Developers Docker container provided by IBM.

This image is not available on Docker Hub but can be built by following the instructions on the GitHub project for the image. This image has been built and tested internally.

Please consider configuring security etc. when running the MQ container.

ELIGIBLE EVENTS:

2016 TopCoder(R) Open

REVIEW STYLE:

Final Review:

Community Review Board

Approval:

User Sign-Off

SHARE:

ID: 30054828