When building and deploying application clients, controlling the visibility of various runtime features can simplify client deployment and testing. In this article, we will build the FeatureService which allows an application to query the service for a set of runtime feature toggles. These feature toggles can be used by the application client to enable or disable selected features.
Throughout the construction of the microservice reference implementation, we have had access to our services aggregated logging and operational metrics. It would be advantageous to extend this visibility beyond the boundary of the backend to our application clients. This article constructs the TelemetryService. This service provides application clients with an endpoint where they can log operational messages for troubleshooting and analysis.
Every application needs an administration console, and ours is no exception. In this article, we will build the AdministrationService to provide users with administration privileges to view, query, and control, various aspects of the application. Once constructed, we will exercise the service's Swagger interface and view the service's operational metrics using the AdministrationDashboard in Grafana.
During the lifetime of every user account, various events are generated and published to the application's message queue. It is advantageous to capture and persist these events to provide an audit log of an account's activity. In this article, we will build the AccountHistoryService which performs this task. In addition to capturing the account events, the service also provides a REST endpoint to query these events. After construction, we will deploy the application and exercise the generated Swagger interface. We then view the operational metrics using the AccountHistory Grafana dashboard.
For every registered user in the application, there exists a corresponding profile that contains application-specific information for that user. In this article, we construct the AccountProfileService, which is responsible for managing this data. The service provides a REST endpoint as well as a MessageQueue listener and persists the profile data in a MongoDB database. We will deploy the application and exercise its REST endpoint using the generated Swagger user interface. We wrap up by viewing the operational metrics using the AccountProfile Grafana dashboard.
In this fourth and final article discussing the AuthenticationService, we will exercise the service using its generated Swagger interface, and we view its operation metrics using the AuthenticationDashboard in Grafana.
In the previous three articles, we created two services, the OutboundEmailService and the OutboundSMSService. Both of these services can be called directly via their respective REST endpoints. However, Calling these services directly can potentially cause contention when the service is under heavy load. We did, however, anticipate this situation when creating the services by including a message queue listener. In this article, we will build the NotificationService, which accepts both email and SMS/MMS message requests, and enqueues the message in the respective message queue topics. This approach reduces the concurrent load on each of the messaging services. After the NotificationService is constructed, we will exercise it using its generated Swagger interface, and view its operational metrics using the corresponding Grafana dashboard.
This article will finish construction of the OutboundEmailService by implementing the service's REST controller and MessageQueue listener. We will use Docker-Compose to deploy the service. Once the service starts, we exercise the REST endpoint using the service's Swagger user interface and send messages to the service's message queue via RabbitMQ's web interface. We complete the article by viewing the service's operational metrics using Grafana.
A common requirement for many applications is the ability to send email messages. In this first part of a two-article series, we build the OuboundEmailService. The service receives outbound email requests via REST endpoint and Message Queue listener and sends them to a configured email provider. This article will focus look at the service models, and the core logic for sending email messages. We will configure Swagger to allow us to exercise the service endpoint, and also discuss service Internationalization (I18N).
Before we start building our first service, we will need to select a few more tools. This article will cover a selection of tools we will be using for our Spring reference implementation.