Spring Cloud Config Server Nedir? Uygulama Örneği
Spring Cloud Dersleri‘ne devam ediyorum.
Bu yazıda Spring Cloud Config Server oluşturarak mikroservislerimizin konfigurasyonlarını tek bir uygulama üzerinden yönetebilmek ve gerektiğinde değişikliklere anında cevap veren bir config server yapmayı açıklayacağım.
Spring Config Server sayesinde mikroservislerimizin operasyon katmanınlarını ayırarak tek bir nokta üzerinden yönetmeyi sağlamaktadır. Spring Config Server sayesinde her mikroservisimiz için ayrı ayrı konfigürasyon dosyaları ile de uğraşmak zorunda kalmıyoruz.
Yapılan değişiklikler üzerinden
Bir diagram üzerinden açıklamak gerekirse;

Cloud config server’ımız bir file ya da .git dosyası ya da farklı kaynaklar. (S3, HashiCorp vs.)üzeriden tutulan verileri tutar ve diğer uygulamalarımız config server’a istekte bulunarak bu bilgileri istek yapan servislerimize iletir.
Spring Cloud Config Server Uygulama
Spring Cloud Config Server uygulamamızı oluşturalım. Maven bağımlılığımız aşağıdaki gibi olacaktır.
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</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>
Code language: HTML, XML (xml)
Bir rest controller yazalım bu yazacağımız controller üzerinde cevap olarak config file’dan okunan değeri cevap olarak döneceğiz ve bu döndüreceğimiz değer config değerinden okunduğu için anlık değer değiştiğinde bile restart etmemize gerek kalmadan güncel değeri okuyabileceğiz.
@RestController
@RequestMapping("/")
public class ServerController {
@Value("${server.version}")
int serverVersion;
@GetMapping
public String getVersion() {
return "Server version: " + serverVersion;
}
}
Code language: Java (java)
application.properties dosyamızda gerekli olan ayarlarımızı girelim.
server.port=8085
spring.application.name=config-server
spring.profiles.active=native
spring.cloud.config.server.native.search-locations=classpath:/config
application.properties dosyası üzerinde dosya sistemi üzerinde yer alan konfigürasyon dosyalarımız hangi yol üzerinde oluğunu belirtiyoruz ve o klasör altındaki bizim enviroment değerlerimizi okuyabilir ve istediğimiz değişikliği esnek bir biçimde değiştirebiliriz. Bu tanımlama içerisinde config
klasöründe olduğunu belirtiyoruz. Bu klasör ise resources
klasörünün altında bulunuyor.

Oluşturduğumuz bu dosyaların içerisine değer/değerlerimizin tanımlamalarını yapalım.
server.version=5
Bu değeri bizim istek yaptığımız herhangi bir uygulama içerisinden çağırdığımızda bu değeri okuyabileceğiz.
Spring Cloud Config Client Uygulama
Bu konfigürasyon dosyamızdan verileri okuyan uygulamamıza config client bağımlılığımızı eklememiz yeterli olmaktadır.
application.properties uygulamasına konfigürasyonların hangi nereden okunması gerektiği belirtiyoruz.
server.port=8086
spring.application.name=app-1
spring.profiles.active=dev
spring.cloud.config.uri=http://localhost:8085
spring.config.import=optional:configserver:http://localhost:8085
Code language: JavaScript (javascript)
app-1 uygulamamızın konfigürasyon dosylarını config server url’sini tanımladık.
app-1 uygulamamızın localhost:8086
adresine istek gönderdiğimizde varsayılan bir değeri okumamız istediğimizde çıkan sonuç aşağıdaki gibi olacaktır.
Server version 5
Farklı tüm ortamlar için farklı değerler olduğunda dev, stg, prod gibi ortamlarda farklı değerler verebiliriz. Bu değişikleri native olarak derslendiği için anında değişiklikler restarta gerek kalmadan hot reload olarak geçerliliğe girer.
Sonraki Spring Cloud Dersleri’nde görüşmek üzere.
No Comment! Be the first one.