Tuesday, December 3, 2019

ActiveMQ: Bridging Topics to Queues

Most recently, I had the need to create a bridge from Topics to Queues to create stateless services that can pick up messages in parallel. Essentially, I wanted to configure the following (in the message broker):

Topic to Queue Bridge
While there are many other ways to do this, I wanted to experiment with ActiveMQ support for this. The following is how I configured it locally (in my dev box):

Spring: Implicit Construction Injection

Over the years, Spring has made a number of enhancements to improve the developer UX. I realize some of these can be too trivial to notice. Today, I present one available since the 4.3 release (over 2 years ago).

Monday, December 2, 2019

Lessons Learned using Togglz

Feature Toggles (a.k.a. Feature Flags) are a common way to test new features in a production environment. I started to experiment with Togglz as a OSS library to implement what I needed. For the purpose of my description, I used Spring Boot as it makes apps development simpler. Here are my findings:

Sunday, December 1, 2019

Git: refusing to merge unrelated histories

Most recently, I found the following error during a git operation:
 
   $ git pull
   fatal: refusing to merge unrelated histories

which led me to a hunt. I found out that since version 2.9.0, git has removed the ability to merge branches with unrelated histories (thanks for the obvious message Git). This change (and many others) can be found here.

Saturday, November 30, 2019

Starting a Project: Data Generator

Sometimes, there is a need to generate data to test your code. While "testing in production" is a sweet spot to be, there are times when you need to "force" (stub) data that reflects certain business phenomena in production. This does not mean "chaos engineering" but rather a finite set that can be ingested into a suite of integration tests to increase confidence in code change.

Tuesday, March 26, 2019

Distributed Spring Integration

Recently, I was given an opportunity to code a use case that required the need to use EIP in a distributed environment. While trying to use the "Splitter" and "Aggregator" patterns, I had a chance to review the source code implementation of many of the components used to implement these using Spring Integration.