Complete microservices architecture with real examples — Step 6 — Config server

Hey buddy! Do you have an idea about maintaining properties and configuration easily by spending the least amount of time? Then, definitely, you have to set up a Config Server which is another microservice with a version control system. Let’s quickly dive into the implementation of it.

Config server

Step 6 — Config Server

Let’s take a look at the project initialization with https://start.spring.io/

Spring Initialzr — Config Server
  • Language: Java
  • Spring boot: 2.4.6
  • Project Metadata

Group: com.agnasarp

Artifact: agnasarp-config-server

Name: agnasarp-config-server

Description: Agnasarp Config Server

Package name: com.agnasarp.configserver

Packaging: Jar

Java version: 8

Eureka Discovery Client: A REST based service for locating services for the purpose of load balancing and failover of middle-tier servers.

Config Server: Central management for configuration via Git, SVN, or HashiCorp Vault.

Project structure of config server in IntelliJ Idea

pom.yml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.agnasarp</groupId>
<artifactId>agnasarp-config-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>agnasarp-config-server</name>
<description>Agnasarp Config Server</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

application.yml

server:
port: 8580

spring:
application:
name: CONFIG-SERVER
cloud:
config:
server:
git:
uri: https://github.com/Agnasarp/agnasarp-microservice-configurations
clone-on-start: true
profiles:
active: native

AgnasarpConfigServerApplication.java

package com.agnasarp.configserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class AgnasarpConfigServerApplication {

public static void main(String[] args) {
SpringApplication.run(AgnasarpConfigServerApplication.class, args);
}

}

Now we can create a repository in a version controlling system to manage configurations that may be used in all microservices we have created.

Remote repository for configurations

In that application.yml file, we can place the configurations that we use to connect Eureka Server as below. These can be removed from all other microservices because now we have the configuration centrally.

eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
hostname: localhost

Now we have to set up one configuration in each microservice to call Service Registry. We create bootstrap.yml and paste the below lines of code. This is going to be used to call Config Server just we set up

spring:
cloud:
config:
enabled: true
uri: http://localhost:8580

Suppose there is a configuration change so we can update it in the GitHub repository and call the refresh method in relevant microservices as below.

curl — location — request POST ‘http://localhost:8280/actuator/refresh'

Download source from github:

Download config-server

Download hystrix-dashboard

Download api-gateway

Download service-registry

Download department-service

Download user-service

Go to Step 1 — Department Microservice

Go to Step 2 — User Microservice

Go to Step 3 — Service Registry

Go to Step 4 — API Gateway

Go to Step 5— Circuit Breaker

Originally published at https://www.agnasarp.com on May 25, 2021.

Agnasarp is a technology-focused blog that has enough information about cutting-edge technologies that you can use for your problems. Stay with us!

Love podcasts or audiobooks? Learn on the go with our new app.