記事のディレクトリ
- 1つのサービスのデモ
- 2クラスタの展開
- 2.1動作環境
- 2.2サーバー
- 2.3クライアント
1つのサービスのデモ
1.1環境
環境:springboot:2.1.3.RELEASE
、springcloud:Greenwich.SR5
1.2ポンポンファイル
<!-- 添加springcloud依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1.3 application.properties
########单个服务,为了预防自己注册自己#############
#是否将自己注册到 Eureka-Server 中, 默认的为 true
eureka.client.registerWithEureka=false
#是否冲 Eureka-Server 中获取服务注册信息, 默认为 true
eureka.client.fetchRegistry=false
1.4起動クラス
@SpringBootApplication
@EnableEurekaServer
public class AppAction {
public static void main(String[] args) {
SpringApplication.run(AppAction.class, args);
}
}
2クラスタの展開
2.1動作環境
建物でEureka
クラスタを、あなたは複数のプロファイル、および使用を追加する必要がありSpringBoot
、マルチ環境のコンフィギュレーションモードを。どのように多くのノードプロファイルの数を追加するクラスタを必要としている
環境:springboot:2.1.3.RELEASE
、springcloud:Greenwich.SR5
2.2サーバー
2.2.1 application.properties
2.2.1.1サービスの設定
# 给应用起一个名字
spring.applicatin.name=eureka-server1
# 端口号
server.port=9090
########在eureka集群中下面的可以加可以不加,不加的话,就注册到其他服务了############
######### 加了的话,在eureka服务页面看不到此服务
######### 不加的话,在eureka服务页面可以看到此服务
#是否将自己注册到 Eureka-Server 中, 默认的为 true
#eureka.client.registerWithEureka=false
#是否冲 Eureka-Server 中获取服务注册信息, 默认为 true
#eureka.client.fetchRegistry=false
#设置 eureka 实例名称, 与配置文件的变量为主
eureka.instance.hostname=eureka1
#设置服务注册中心地址, 指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://eureka2:9090/eureka/
#配置日志
logging.config=classpath:logback.xml
2.2.1.1 2つのサービスの設定
# 给应用起一个名字
spring.applicatin.name=eureka-server2
# 端口号
server.port=9090
########在eureka集群中下面的可以加可以不加,不加的话,就注册到其他服务了############
#是否将自己注册到 Eureka-Server 中, 默认的为 true
#eureka.client.registerWithEureka=false
#是否冲 Eureka-Server 中获取服务注册信息, 默认为 true
#eureka.client.fetchRegistry=false
#设置 eureka 实例名称, 与配置文件的变量为主
eureka.instance.hostname=eureka2
#设置服务注册中心地址, 指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://eureka1:9090/eureka/
#配置日志
logging.config=classpath:logback.xml
2.2.2 logbackログ設定
2.2.2.1ログデモ
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="${catalina.base}/logs/" />
<!-- 控制台输出 -->
<appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志输出编码 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="DEBUG">
<appender-ref ref="Stdout" />
<appender-ref ref="RollingFile" />
</root>
</configuration>
2.2.2.2ログファイル名のバグ
エラーメッセージ:catalina.base _is_undefined
catalina.home
公共の場所情報をポイントし、あり、bin
そしてlib
親ディレクトリ。
catalina.base
それぞれにポインティングTomcat
場所ディレクトリ情報プライベート、それはconf、logs、temp、webapps和work
親ディレクトリ
時々例えば、定義するためにいくつかの変数を使用${catalina.base}、${catalina.home}
してそうで。しかし、ケースは時々という名前が生成されます、まだ定義されていないこれらの変数から出てくるXXXX _IS_UNDEFINED
ディレクトリを。
この目的のために使用することができる${catalina.base:-.}、${catalina.home:-.}
代わりに、
2.2.3開始クラスタの展開
2.2.3.1包装
Maven install
2.2.3.2書き込み起動スクリプト
起動スクリプトを実行するように設定2.2.3.3権限
Chmod 777 server.sh
2.2.3.4は、ホストファイルのlinuxを変更します
vim /etc/hosts
192.168.70.134 eureka1
192.168.70.135 eureka2
2.2.3.5スタートユーレカレジストリ
./server.sh start
スタート
./server.sh stop
ストップ
2.3クライアント
2.3.1クラスタサービスプロバイダー
2.3.1.1導入クライアント座標
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.3.1.2プロフィール
spring.application.name=eureka-collect-provider
server.port=9080
#设置客户端,指向两个服务注册地址
eureka.client.serviceUrl.defaultZone=http://192.168.126.131:9090/eureka/,http://192.168.126.133:9090/eureka/
または直接、ここでは使用しないでip
次のようにアドレスではなくホスト名マッピング方法は次のとおりです。
#设置服务注册中心地址, 指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://eureka1:8761/eureka/,http://eureka2:8761/eureka/
また、あなたは、このパスが必要C:\Windows\System32\drivers\etc
であるhosts
マップに次の書類を追加します:
192.168.70.134 eureka1
192.168.70.135 eureka2
2.3.1.3は、起動クラスを変更します
@EnableEurekaClient
@SpringBootApplication
public class AppAction {
public static void main(String[] args) {
SpringApplication.run(AppAction.class, args);
}
}
書き込みテストインターフェイスに2.3.1.4サービス
2.3.1.4.1エンティティクラス
UserPojo.java
public class UserPojo {
private int age;
private String name;
//省去get/set方法,以及有参无惨构造函数
}
2.3.1.4.2制御層
@RestController
public class UserController {
@RequestMapping("/hello")
public List<UserPojo> getUsers(){
List<UserPojo> list = new ArrayList<>();
list.add(new UserPojo(1,"张三1"));
list.add(new UserPojo(2,"张三2"));
list.add(new UserPojo(3,"张三3"));
return list;
}
}
2.3.2クラスタの消費者サービス
2.3.2.1クライアントプロバイダと連携
2.3.2.2プロフィール
spring.application.name=eureka-collect-consumer
server.port=9070
#设置客户端,指向两个服务注册地址
eureka.client.serviceUrl.defaultZone=http://192.168.126.131:9090/eureka/,http://192.168.126.133:9090/eureka/
プロバイダとメソッド2.3.2.3起動クラス
2.3.2.4エンティティクラスのコード
2.3.2.4.1 Serivce层
@Service
public class UserService {
@Autowired
private LoadBalancerClient client;//ribbon负载均衡
public List<UserPojo> getUser(){
//ServiceInstance,是根据服务名字查询注册的服务的,封装了服务的基本信息, 如 IP, 端口
ServiceInstance service = client.choose("eureka-collect-provider");
StringBuffer ip = new StringBuffer();
//http://localhost:9080/hello
ip.append("http://").append(service.getHost()).append(":").
append(service.getPort()).append("/hello");
RestTemplate rt = new RestTemplate();
//返回类型
ParameterizedTypeReference<List<UserPojo>> type = new ParameterizedTypeReference<List<UserPojo>>(){};
//ResponseEntity:封装返回类型
ResponseEntity<List<UserPojo>> response = rt.exchange(ip.toString(),HttpMethod.GET,null,type);
HttpStatus statusCode = response.getStatusCode();
//httpstatus只是一个枚举类
return response.getBody();
}
}
2.3.2.4.2コントローラ層
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/hello")
public List<UserPojo> getUsers(){
return userService.getUser();
}
}
2.3.3ユーレカサービス登録ページサービス
2.3.4登録されたIPとして登録登録ページのホスト名を変更します
以下のためのレジスタに示すようにhostname
、登録の代わりによりip
登録された
クライアントの設定ファイルにapplication.properties
、以下の修正を追加します。
#表示是使用ip地址
eureka.instance.prefer-ip-address=true
# springboot2.0之后,取地址用ip-address,之前是用ipAddress
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
次のようにクライアントインタフェースを追加した後です。