将Rails从SpringCloudConfig Server连接起来
关于
我从使用Spring Boot的项目转移到使用Rails的项目时,突然想到是否存在一个可以将Rails连接到Spring Cloud Config服务器的客户端Gem,于是进行了调查。
Spring Cloud Config是什么?
使用Git等进行管理配置信息,并通过微服务(Spring Cloud Config Server)充当返回配置信息的服务器的角色来利用配置信息。使用客户端配置的微服务只需加载Spring Cloud Config Client的Jar,并只需使用Config Server的URL等信息即可使用配置。
我要搭建ConfigServer。
我在GitHub上搜索了示例代码,搭建了ConfigServer。我使用了这个资源。
您可以根据README.md中的说明执行,也可以使用mvnw spring-boot:run来执行,但我稍微解释一下内部的内容。
以下是pom.xml(摘录),其中boot的版本是2.3.3.RELEASE,并将spring-cloud-config-server添加为依赖。
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
....
设定情报的数据来源可以在 bootstrap.yml 文件中按以下方式定义。
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://{設定を保存するリポジトリ}
searchPaths: {リポジトリ内で設定を保存するフォルダ}
在Spring Boot应用程序中添加@EnableConfigServer注解如下。
@SpringBootApplication
@EnableConfigServer
public class Application {
public static void main(String args[]) {
SpringApplication.run(Application.class, args);
}
}
使用配置实用程序的客户端微服务应在pom.xml中添加以下内容以添加config client的依赖项。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
在bootstrap.yml中,将Config Server的URL设置如下。
pring:
application:
name: config-client-test
cloud:
config:
env: default # optional
label: master # optional
uri: http://localhost:8888 # optional
关于在Ruby上的使用
在这里,我已经简要介绍了如何在spring-boot中使用config server。接下来,我将介绍如何在Ruby中使用它。
当我在Google上搜索时,
我找到了一个问题,但似乎它没有支持Rails 6。另外,从提交评论来看,config server的支持版本似乎只到v2。同时也有另一个问题,
这是一个例子。通过在Gemfile中添加gem ‘scc_ruby’即可使用。可以按照下面的方式使用。
h = SccRuby::Api.fetch('http://localhost:8888', 'sample', Rails.env)
客户端库是不需要的吗?
在这里我想到的是,由于可以使用HTTP,所以可能不需要使用客户端库,例如可以像下面这样获取。
uri = URI.parse("http://localhost:8888/sample/" + Rails.env)
response = Net::HTTP.get_response(uri)
其他语言的客户端
我没有详细了解,但似乎Python的客户端有以下这些。
spring-config-client自2019年以来未进行更新,但config-client在2021年4月有更新。
我也查了Go语言。
2021 年有一项更新。
总结
-
- Spring Cloud Configに他の言語のクライアントから繋ぐことができる
-
- クライアントライブラリを利用することができるが、ライブラリが古いことがありそう
- ライブラリを利用しなくてもHTTPで繋いで設定を取得することができる。