注:本篇文章主要参考周阳老师讲解的cloud进行整理的!
安装并运行consul
官网下载
下载完成后只有一个consul.ext文件,对应目录下查看版本号信息
使用开发模式启动
consul agent -dev
通过以下地址访问Consul的首页
http://localhost:8500
Consul数据持久化配置并注册为Windows服务
- 在D:\workingSoftware\consul目录下新建空文件夹mydata,并新建文件consul_start.bat
- consul_start.bat内容如下
@echo.服务启动......
@echo off
@sc create Consul binpath= "D:\workingSoftware\consul\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect 1 -data-dir D:\workingSoftware\consul\mydata "
@net start Consul
@sc config Consul start= AUTO
@echo.Consul start is OK......success
@pause
- 右键管理员权限打开
- 启动服务,后续consul的配置数据会保存进mydata文件夹,重启之后配置依旧存在
服务注册与发现
服务提供者8001,cloud-provider-paymen8001
修改pom,增加以下内容
<!--SpringCloud consul discovery -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
修改application.yml,增加以下配置
spring:
####Spring Cloud Consul for Service Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
主启动类增加注解
package com.mui.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan("com.mui.cloud.mapper")
@EnableDiscoveryClient
public class Main8001 {
public static void main(String[] args) {
SpringApplication.run(Main8001.class,args);
}
}
服务消费者80,cloud-consumer-order80
修改pom,增加以下内容
<!--SpringCloud consul discovery -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
修改application.yml,增加以下配置
spring:
application:
name: cloud-consumer-order
####Spring Cloud Consul for Service Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
prefer-ip-address: true #优先使用服务ip进行注册
service-name: ${spring.application.name}
主启动类增加注解
package com.mui.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class Main80 {
public static void main(String[] args) {
SpringApplication.run(Main80.class, args);
}
}
OrderController控制器修改如下
// private static final String PaymentSrv_URL = "http://localhost:8001";
// 服务注册中心上的微服务名称
private static final String PaymentSrv_URL = "http://cloud-payment-service";
启动80以及8001服务查看Consul前台页面
请求http://cloud-payment-service/pay/get/1报错如下
修改RestTemplateConfig
package com.mui.cloud.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
//使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
服务配置与更新
修改cloud-provider-payment8001
修改pom,增加如下内容
<!--SpringCloud consul config-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
新增bootstrap.xml
spring:
application:
name: cloud-payment-service
####Spring Cloud Consul for Service Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
config:
profile-separator: '-' # default value is ",",we update '-'
format: YAML
修改application.yml,全部内容如下
server:
port: 8001
# ==========applicationName + druid-mysql8 driver===================
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
username: root
password: 123456
profiles:
# 多环境配置加载内容dev/prod,不写就是默认default配置
active: dev
# ========================mybatis===================
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.mui.cloud.entities
configuration:
map-underscore-to-camel-case: true
consul服务器key/value配置
新增如下文件夹,文件夹已/结尾
文件中新增KV如下
PayController新增如下内容
import org.springframework.beans.factory.annotation.Value;
@Value("${server.port}")
private String port;
@GetMapping(value = "/pay/get/info")
@Operation(summary = "服务配置与刷新测试")
private String getInfoByConsul(@Value("${mui.info}") String mui) {
return "mui: " + mui + "\t" + "port: " + port;
}
启动服务并访问测试
修改consul中配置的内容无法动态获取需修改主启动类增加注解配置如下
package com.mui.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan("com.mui.cloud.mapper")
@EnableDiscoveryClient
// 动态刷新
@RefreshScope
public class Main8001 {
public static void main(String[] args) {
SpringApplication.run(Main8001.class,args);
}
}
配置动态刷新间隔,修改bootstrap.yml
spring:
application:
name: cloud-payment-service
####Spring Cloud Consul for Service Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
config:
profile-separator: '-' # default value is ",",we update '-'
format: YAML
watch:
wait-time: 3