服务注册发现 & 配置中心 springcloud alibaba nacos

文章目录

  • [0100 系统环境](#0100 系统环境)
  • [0200 nacos安装](#0200 nacos安装)
    • [0201 下载](#0201 下载)
    • [0202 安装](#0202 安装)
  • [0300 工程说明](#0300 工程说明)
    • [0301 结构说明](#0301 结构说明)
    • [0302 运行效果](#0302 运行效果)
  • [0400 代码说明](#0400 代码说明)
    • [0401 服务提供者(Provider Service)](#0401 服务提供者(Provider Service))
    • [0402 服务消费者(Consumer Service)](#0402 服务消费者(Consumer Service))
    • [服务提供者SDK(Provider Service sdk)](#服务提供者SDK(Provider Service sdk))
  • [0500 负载均衡](#0500 负载均衡)
  • [0600 源码地址](#0600 源码地址)

0100 系统环境

base 复制代码
	JDK: jdk-20.0.2
	spring cloud alibaba: 2022.0.0.0
	spring cloud: 2022.0.4
	spring boot: 3.1.5
	nacos: 2.3.0-BETA

0200 nacos安装

0201 下载

官网:https://nacos.io/zh-cn/index.html

github:https://github.com/alibaba/nacos

当前最新版本:https://github.com/alibaba/nacos/releases/download/2.3.0-BETA/nacos-server-2.3.0-BETA.zip

0202 安装

  • 导入数据库脚本:./conf/mysql-schema.sql,如下:
sql 复制代码
mysql> show tables;
+----------------------+
| Tables_in_nacos      |
+----------------------+
| config_info          |
| config_info_aggr     |
| config_info_beta     |
| config_info_tag      |
| config_tags_relation |
| group_capacity       |
| his_config_info      |
| permissions          |
| roles                |
| tenant_capacity      |
| tenant_info          |
| users                |
+----------------------+
12 rows in set (0.00 sec)
  • 配置数据库
    修改./conf/application.properties
shell 复制代码
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
  • 启动服务
shell 复制代码
# 默认是集群模式
./startup.sh -m standalone

访问地址:http://192.168.1.200:8848/nacos
先做个基础设置

创建namespace:prod
创建个配置文件

0300 工程说明

0301 结构说明

shell 复制代码
demo-springcloud-alibaba-nacos (父工程)
├── demo-springcloud-alibaba-nacos-consumer (服务消费者,端口:8000,未使用配置中心)
├── demo-springcloud-alibaba-nacos-provider1 (服务提供者,端口:9001,已使用配置中心)
├── demo-springcloud-alibaba-nacos-provider2 (服务提供者,端口:9002,已使用配置中心)
└── demo-springcloud-alibaba-nacos-provider-sdk(服务端,SDK)

注意: 示例中,为了方便看效果,服务提供者分别提供两个工程,内部代码都一样,只是端口不同。

0302 运行效果

访问这个地址,将随机返回结果:http://localhost:8000/echo2/a

base 复制代码
我的端口是:9001, 配置中心的值是:abc, 传过来的值是:a
base 复制代码
我的端口是:9002, 配置中心的值是:abc, 传过来的值是:a

修改配置中心配置项,可立即得到最新结果;

0400 代码说明

0401 服务提供者(Provider Service)

demo-springcloud-alibaba-nacos-provider1 ,端口:9001

关键依赖(pom.xml)

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

关键配置(application.properties)

shell 复制代码
spring.config.import=optional:nacos:demo-springcloud-alibaba-nacos-config

spring.application.name=demo-springcloud-alibaba-nacos-provider
spring.profiles.active=test

server.port=9001

spring.cloud.nacos.server-addr=192.168.1.200:8848
spring.cloud.nacos.discovery.server-addr=192.168.1.200:8848
spring.cloud.nacos.discovery.namespace=prod
spring.cloud.nacos.discovery.group=demo
spring.cloud.nacos.discovery.weight=5
spring.cloud.nacos.config.server-addr=192.168.1.200:8848
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.namespace=prod
spring.cloud.nacos.config.group=demo

management.endpoints.web.exposure.include=*

启动类:

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudAlibabaNacosProvider1 {

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

demo-springcloud-alibaba-nacos-provider1 ,端口:9002

demo-springcloud-alibaba-nacos-provider1代码完全一样,只是application.properties中的server.port=9002

yaml 复制代码
spring.application.name=demo-springcloud-alibaba-nacos-provider
spring.profiles.active=test

server.port=9002
....

0402 服务消费者(Consumer Service)

demo-springcloud-alibaba-nacos-consumer ,端口:8000

关键依赖(pom.xml)

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

关键配置(application.properties)

shell 复制代码
spring.application.name=demo-springcloud-alibaba-nacos-consumer
server.port=8000

spring.cloud.nacos.discovery.server-addr=192.168.1.200:8848
spring.cloud.nacos.discovery.namespace=prod
spring.cloud.nacos.discovery.group=demo
spring.cloud.loadbalancer.nacos.enabled=true

management.endpoints.web.exposure.include=*

启动类:

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudAlibabaNacosConsumer {

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

服务提供者SDK(Provider Service sdk)

实际工作中,该工程应该由服务提供者 开发团队开发,供服务消费者依赖调用,来实现远程调用。本实例使用openfeign。

关键依赖(pom.xml)

xml 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

关键代码(demo-springcloud-alibaba-nacos-provider-sdk工程ProviderService类):

java 复制代码
// 接口,无需手写实现类
@Component
@FeignClient(name = ProviderConstants.SERVICE_ID)
public interface ProviderService {

    @RequestMapping(value = "/echo/{str}")
    String echo(@RequestParam("str") String str);
}

服务提供者依赖后使用(demo-springcloud-alibaba-nacos-provider1工程)

服务消费者依赖后使用(demo-springcloud-alibaba-nacos-consumer工程)

java 复制代码
@Autowired
private ProviderService providerService;

@ResponseBody
@RequestMapping(value = "/echo2/{str}")
public String echo2(@PathVariable String str) {
    return providerService.test(name);
}

0500 负载均衡

客户端负载,按服务端权重负载:(demo-springcloud-alibaba-nacos-consumer工程)

java 复制代码
@Configuration(proxyBeanMethods = false)
public class CustomLoadBalancerConfig {

    @Resource
    private NacosDiscoveryProperties nacosDiscoveryProperties;

    @Bean
    public ReactorLoadBalancer<ServiceInstance> nacosLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {

        var name = ProviderConstants.SERVICE_ID;
        return new NacosLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name,
                nacosDiscoveryProperties);
    }
}

0600 源码地址

https://gitee.com/xiaojianhx/demo-springcloud-alibaba-nacos

相关推荐
NiNg_1_2341 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
Chrikk2 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*2 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue2 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man2 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
Wx-bishekaifayuan4 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer084 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
Yaml45 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理