Developing Services with Apache Camel - Part IV: Load Testing and Monitoring

Gatling Welcome to the final article in a series on my experience developing services with Apache Camel. I learned how to implement CXF endpoints using its Java DSL, made sure everything worked with its testing framework and integrated Spring Boot for external configuration. For previous articles, please see the following:

This article focuses on load testing and tools for monitoring application performance. In late July, I was asked to look into load testing the new Camel-based services I'd developed. My client's reason was simple: to make sure the new services were as fast as the old ones (powered by IBM Message Broker). I sent an email to the Camel users mailing list asking for advice on load testing.

I'm getting ready to put a Camel / CXF / Spring Boot application into production. Before I do, I want to load test and verify it has the same throughput as a the IBM Message Broker system it's replacing. Apparently, the old system can only do 6 concurrent connections because of remote database connectivity issues.

I'd like to write some tests that make simultaneous requests, with different data. Ideally, I could write them to point at the old system and find out when it falls over. Then I could point them at the new system and tune it accordingly. If I need to throttle because of remote connectivity issues, I'd like to know before we go to production. Does JMeter or any Camel-related testing tools allow for this?

In reply, I received suggestions for Apache's ab tool and Gatling. I'd heard of Gatling before, and decided to try it.

TL;DR

This article shows how to use Gatling to load test a SOAP service and how to configure Log4j2 with Spring Boot. It also shows how hawtio can help monitor and configure a Camel application. I hope you enjoyed reading this series on what I learned about developing with Camel over the past several months. If you have stories about your experience with Camel (or similar integration frameworks), Gatling, hawtio or New Relic, I'd love to hear them.

It's been a great experience and I look forward to developing solid apps, built on open source, for my next client. I'd like to get back into HTML5, AngularJS and mobile development. I've had a good time with Spring Boot and JHipster this year and hope to use them again. I find myself using Java 8 more and more; my ideal next project would embrace it as a baseline. As for Scala and Groovy, I'm still a big fan and believe I can develop great apps with them.

If you're looking for a UI/API Architect that can help accelerate your projects, please let me know! You can learn more about my extensive experience from my LinkedIn profile.

[Read More]

Posted in Java at Oct 15 2014, 10:04:01 AM MDT Add a Comment

The 21-Day Sugar Detox

For the past 21-days, I've been on a sugar detox. Becky Reece, a long-time friend of Trish's, inspired us to do it. Becky is a nutritionist and we've always admired how fit she is. Becky challenged a bunch of her friends to do it, and Trish signed up. I told Trish I'd do it with her to make things easier from a cooking perspective.

To be honest, we really didn't know what we were getting into when we started it. Trish ordered the book the week before we started and it arrived a couple days before things kicked off. Trish started reading the book the night before we started. That's when we realized we should've prepared more. The book had all kinds of things you were supposed to do the week before you started the detox. Most things involved shopping and cooking, so you were prepared with pre-made snacks and weren't too stressed out.

We started the detox on Monday, September 22, 2014. That's when we first realized there was no alcohol (we both love craft beer). Trish shopped and cooked like a madwoman that first week. I think we spent somewhere around $600 on groceries. Trish wrote about our first week on her blog.

We are on Sunday Day-7 and made it through the first week with two birthday parties and a nice dinner out eating well and staying on track. I'm not weighing myself until the end, but my face looks a little slimmer, my skin feels smoother and my wedding ring is not as tight as it used to be. I feel great and have started to believe this is the last detox, diet or cleanse I will ever need. Cleansing my life of sugar could be a life changer especially when an Avo-Coconana Smoothie with Almond Butter Pad Thai becomes my new favorite meal.

[Read More]

Posted in General at Oct 13 2014, 01:05:00 PM MDT 4 Comments

Developing Services with Apache Camel - Part III: Integrating Spring 4 and Spring Boot

Spring Boot This article is the third in a series on Apache Camel and how I used it to replace IBM Message Broker for a client. I used Apache Camel for several months this summer to create a number of SOAP services. These services performed various third-party data lookups for our customers. For previous articles, see Part I: The Inspiration and Part II: Creating and Testing Routes.

In late June, I sent an email to my client's engineering team. Its subject: "External Configuration and Microservices". I recommended we integrate Spring Boot into the Apache Camel project I was working on. I told them my main motivation was its external configuration feature. I also pointed out its container-less WAR feature, where Tomcat (or Jetty) is embedded in the WAR and you can start your app with "java -jar appname.war". I mentioned microservices and that Spring Boot would make it easy to split the project into a project-per-service structure if we wanted to go that route. I then asked two simple questions:

  1. Is it OK to integrate Spring Boot?
  2. Should I split the project into microservices?

Both of these suggestions were well received, so I went to work.

[Read More]

Posted in Java at Oct 08 2014, 07:13:18 AM MDT 2 Comments

Developing Services with Apache Camel - Part II: Creating and Testing Routes

Apache Camel This article is the second in a series on Apache Camel and how I used it to replace IBM Message Broker for a client. The first article, Developing Services with Apache Camel - Part I: The Inspiration, describes why I chose Camel for this project.

To make sure these new services correctly replaced existing services, a 3-step approach was used:

  1. Write an integration test pointing to the old service.
  2. Write the implementation and a unit test to prove it works.
  3. Write an integration test pointing to the new service.

I chose to start by replacing the simplest service first. It was a SOAP Service that talked to a database to retrieve a value based on an input parameter. To learn more about Camel and how it works, I started by looking at the CXF Tomcat Example. I learned that Camel is used to provide routing of requests. Using its CXF component, it can easily produce SOAP web service endpoints. An end point is simply an interface, and Camel takes care of producing the implementation.

[Read More]

Posted in Java at Sep 30 2014, 10:05:38 AM MDT 5 Comments

Developing Services with Apache Camel - Part I: The Inspiration

In early May, my client asked me to work on a project migrating from IBM Message Broker 6.1 to an open source solution. Their reason was simple, the IBM solution was end of life and outdated. To prove how out of date it was, the Windows version required Windows XP to run. IBM WebSphere Message Broker has been replaced by IBM Integration Bus in recent years, but no upgrade path existed.

At first, I didn't want to do the project. I was hired as a Modern Java/UI Architect and I had enjoyed my first month upgrading libraries, making recommendations and doing a bit of UI performance work. I hadn't done much with ESBs and I enjoy front-end development a lot more than backend. It took me a couple days to realize they were willing to pay me to learn. That's when I decided to clutch up, learn how to do it all, and get the job done. This article is the first in a series on what I learned during this migration project.

My approach for figuring out how everything worked was similar to working on any new application. I get the source code, install the software necessary to run it, and run it locally so I can interact with it.

[Read More]

Posted in Java at Sep 23 2014, 10:58:25 AM MDT 5 Comments

Rafting the Green River through Desolation Canyon

After rafting the Yampa in June, we knew we'd experienced a once-in-a-lifetime kinda trip. We never expected to have two in one summer. When we got an invite to raft Desolation Canyon over Labor Day weekend, we jumped at the opportunity.

The trip started on Jack's birthday: Thursday, August 28th. We drove from Denver to Green River, Utah the night before, and had some adventures along the way. As we were heading down Vail Pass, our trailer started to swing from side to side, almost whiplashing us off the road. We quickly slowed down and didn't go over 65 MPH for the rest of the trip. I figured this was caused by the rear spring spacers we added to the Syncro. The heightened rear caused the raft trailer to be out of balance, and we needed a new hitch to drop it down.

We arrived around 1:30am, popped the top on our camper and went to sleep. The next morning, we woke up and met some of our fellow floaters for the first time. An hour later, were were getting ready to leave and I was inspecting our trailer. That's when I noticed one of the wheels was about to fall off. The bearings were shot and the wheel was barely hanging on.

Luckily, one of the guys we just met had replaced all his trailer's bearings the week before and was on it. He knew exactly what to do and went to work. There was a Napa Auto Parts store a mile away. Two hours and several trips to Napa later, we were back in business and on the road.

We celebrated Jack's 10th birthday while driving to the put in, opening presents and having a good ol' time. We also had some cupcakes to celebrate with everyone once we arrived. Jack was especially pumped for the huckleberries my Mom overnighted.

Happy 10th Bithday Jack! YAY Huckleberries from Mimi and Baba in Montana

We launched with five families total, 10 adults and 10 kids. We had five rafts, a duckey, an inner tube and two motors to get us through the flat water. We didn't get on the river until 6pm that first day, and only made it seven miles before dark.

[Read More]

Posted in General at Sep 20 2014, 05:11:17 PM MDT 2 Comments

Getting Started with JHipster on OS X

Last week I was tasked with developing a quick prototype that used AngularJS for its client and Spring MVC for its server. A colleague developed the same application using Backbone.js and Spring MVC. At first, I considered using my boot-ionic project as a starting point. Then I realized I didn't need to develop a native mobile app, but rather a responsive web app.

My colleague mentioned he was going to use RESThub as his starting point, so I figured I'd use JHipster as mine. We allocated a day to get our environments setup with the tools we needed, then timeboxed our first feature spike to four hours.

My first experience with JHipster failed the 10-minute test. I spent a lot of time flailing about with various "npm" and "yo" commands, getting permissions issues along the way. After getting thinks to work with some sudo action, I figured I'd try its Docker development environment. This experience was no better.

JHipster seems like a nice project, so I figured I'd try to find the causes of my issues. This article is designed to save you the pain I had. If you'd rather just see the steps to get up and running quickly, skip to the summary.

[Read More]

Posted in Java at Sep 08 2014, 11:30:33 AM MDT 5 Comments

The First Day of School

Another school year is upon us! This year brings a big change: Abbie is now a middle schooler! I missed blogging about the beginning of school last year because Trish and I were honeymooning in Ireland, Italy, Thailand and Fiji. For fall activities, Abbie and Trish are leasing a horse, so they'll be doing lots of riding. Jack is inspired to learn how to program, but I can't help but think some outdoor activities will be more fun. I hope to keep him interested in programming by organizing a fall Devoxx4Kids Denver.

First Day of School 2014

Personally, I'm not quite ready to start thinking about the fall. With a 6-day rafting trip down Desolation Canyon over Labor Day weekend, we hope to squeeze the last little bit out of summer before it's over. We'll be taking both kids and driving our Syncro with its new engine.

H6 Engine Conversion by RMW Solar Panel Installed. Thanks Dad! Nicer stance with spacers

Reunited and it feels so good!

When we get back, it's time for football/tailgating season, leaves changing and the finishing of the '66 Dream Bus. With the interior getting painted soon, I believe the final push is right around the corner!

Related: The First Day of School 2007, 2010 and 2011.

Posted in General at Aug 18 2014, 04:05:34 PM MDT Add a Comment

The Scenic Way to Santa Fe

After having a successful run at ski season with our VW Syncro, Trish and I figured we'd see how it performed in the summer. We took it 4x4ing in Moab, rafting in Dinosaur National Monument and camping for Father's Day Weekend. It was a trusty steed for our kids, dogs, skis and raft. Earlier this month, we planned a week-long road trip to Santa Fe to see one of my old college roommates. Because of the holiday weekend, it turned into a 10-day road trip. We left Denver in style on the morning of the 4th.

Happy 4th from our Red, White and Blues!

The motorcycle on the back didn't seem to slow us down much. We drove from Denver to Winter Park, taking the long way over Squaw Pass to avoid traffic.

The Scenic Route over Squaw Pass Colorado High Country

When we arrived at our Ski Shack, the engine was making a loud knocking sound. We dismissed it as a random occurrence. When I drove to the gas station 45 minutes later, the knocking was loud enough that heads turned when I drove past. After fueling up, I started the van and began driving back to our condo. The engine sputtered, the tires screeched and then the engine died. I pulled to the side, conveniently still in the gas station's parking lot. The engine would no longer turn over.

[Read More]

Posted in General at Jul 27 2014, 11:56:52 AM MDT 2 Comments

McGinity Photo on the cover of Whisky Magazine!

A couple years ago, my dad and I were driving to get some materials for a home improvement project we were working on. It was during a gorgeous Colorado sunset, one so beautiful that I called Trish and told her "You have to go outside and see it!" Not only did she capture the sunset that day, but she shot one of her favorite pictures of all time. She calls that photo "Stranahan's Truck" and its been one of her best sellers. In fact, this month it's featured on the cover of Whisky Magazine!

The original version of this photo is available on her website. Her description:

I love this photo I took of Stranahan's Colorado Whiskey Truck and Distillery last spring. Rob Dietrich is the head distiller of Stranahan's Colorado Whiskey and this is his 1938 Dodge that John "the Duke" Wayne used to drive when he stayed in Aspen, Colorado.

I love this photo I took of Stranahan's Colorado Whiskey Truck and Distillery last spring.  Rob Dietrich is the head distiller of Stranahan's Colorado Whiskey and this is his 1938 Dodge that John Wayne used to drive when he stayed in Aspen, Colorado.

Way to go baby! You're awesome! :)

Posted in General at Jul 26 2014, 10:24:00 AM MDT 1 Comment