Posts

Showing posts with the label microservices

Changing the Default Terminal to Terminator on Ubuntu

Image
Terminator is a powerful tool for developers, allowing you to manage multiple terminal sessions in a single window. Features like splitting panes, tabs, and simultaneous input can significantly boost your productivity. Step 1: Install Terminator First, install Terminator using the apt package manager. sudo apt update sudo apt install terminator -y The -y option automatically answers 'yes' to any prompts during the installation process, streamlining the setup. Step 2: Set as the System Default Ubuntu uses a utility called update-alternatives to manage default applications. We'll use this tool to change the default terminal emulator ( x-terminal-emulator ) to Terminator. Run the Configuration Command Enter the following command in your terminal. A list of available terminals will appear. sudo update-alternatives --config x-terminal-emulator Select Terminator From the resulting list, enter the selection number corresponding to terminator and press Enter. ...

How to Add a gRPC Endpoint to a Spring Boot Microservice

Image
This blog guides you through the standard procedure for adding a gRPC endpoint to the order-service project. The primary goal is to handle "create new order" requests from external clients via gRPC. This process involves calling an internal u ser-service to validate user information. Why Use gRPC? Performance: It's fast, using HTTP/2 and binary serialization (Protobuf), which reduces communication overhead. Strict API Specification: The .proto file clearly defines the service interface and message structures, ensuring type safety at compile time. Multi-language Support: It's suitable for polyglot architectures, as clients and servers can be implemented in various languages. 1. Define the Service with Protocol Buffers (.proto) First, define the service contract by creating a .proto file in the src/main/proto directory. order.proto syntax = "proto3"; package com.abc.order.grpc; // Java code generation options option java_multiple_fil...

Spring Boot Actuator, How to Monitor Application Health with actuator-health

Image
Spring Boot Actuator provides a wide range of features to monitor and manage your application when it's deployed in a production environment. These features can be accessed via HTTP endpoints or JMX, and they automatically enable capabilities such as auditing, health checks, and metrics collection in your application. Actuator is essential in cloud-native and microservice architectures, allowing real-time monitoring of application status, metrics, and traffic data. In particular, the /actuator/health endpoint offers a basic mechanism to check if the application is running properly, making it crucial for integration with load balancers, Kubernetes, and other orchestration tools. Spring Boot Actuator Setup 1. Add Actuator Dependency pom.xml (maven) <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies...

Managing Shared Libraries in Microservice Architecture Using GCP Artifact Registry

Image
In a microservice architecture, it's common for multiple services to share common functionality or utility classes. To handle this effectively, I manage these shared components as a reusable library (like libs.jar ) that each service can depend on. In this post, I’ll show you how I use GCP Artifact Registry to efficiently manage and distribute a shared library across microservices. Step 1: Enable the Artifact Registry API $ gcloud services enable artifactregistry.googleapis.com --project=[PROJECT_ID] Step 2: Create a Maven Repository in GCP Artifact Registry $ gcloud artifacts repositories create maven-repo \ --repository-format=maven \ --location=us-central1 \ --description="Shared Maven Repo for common libraries" $ gcloud artifacts repositories list --location=us-central1 REPOSITORY FORMAT LOCATION DESCRIPTION maven-repo MAVEN us-central1 Shared Maven repo Step 3: Configure pom.xml for the Shared Library Project In the share...

The difference between Rate Limiting and Throttling in an API Gateway

While "Rate Limiting" and "Throttling" are often used interchangeably in some contexts, they have distinct nuances. Rate Limiting: This defines how many requests a client can make in a specific timeframe . If the user exceeds this limit, their requests will be denied. This limit is typically set for short durations (e.g., per minute, per hour). For example, if an API allows a user 1,000 requests per hour, that's rate limiting. Throttling: Throttling dynamically regulates the speed or rate of requests to ensure that the system doesn't get overwhelmed. Throttling is introduced to maintain the overall health and performance of a system , ensuring service continuity even during spikes or unexpected surges in traffic. For example, if more requests arrive at the server than it can handle, throttling would slow down the acceptance of incoming requests to prevent overloading. In summary, "Rate Limiting" ensures that a user or client doesn't exceed a s...