官网:https://nacos.io/zh-cn/
1、下载:https://github.com/alibaba/nacos/releases/tag/1.4.3,windows版的是:nacos-server-1.4.3.zip,官网下载慢,网盘下载链接:https://pan.baidu.com/s/1aYY0xfmHx_7hXiGub45Gqg 提取码:7l2t
2、解压后找到bin/startup.cmd,记事本打开,把 set MODE="cluster" (集群模式)修改为 set MODE="standalone"(单机模式),方法二:cmd运行,切到startup.cmd目录,执行startup.cmd -m standalone,
方法三:修改startup.cmd,添加一行 set "NACOS_OPTS=%NACOS_OPTS% -Dnacos.standalone=true"
3、找到conf/nacos-mysql.sql,在本机创建一个数据库(nacos_config),然后执行这个脚本,创建好table。
4、找到conf/application.properties,放开注释
### Count of DB: db.num=1 ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=madeinhome
5、修改数据库连接配置,数据库名称:nacos_config,账号,密码。
6、启动startup.cmd
7、启动成功后,浏览器访问:http://localhost:8848/nacos/#/login,账号密码都是nacos,登录成功。
参考:https://blog.csdn.net/weixin_42982636/article/details/108221299
8、父pom
<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.0.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
子module的pom
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
子module的启动类加注解@SpringBootApplication 和 @EnableDiscoveryClient
nacos文档:https://spring-cloud-alibaba-group.github.io/github-pages/2021/en-us/index.html
spring boot 和 spring cloud的版本匹配信息:https://start.spring.io/actuator/info
springcloud + nacos版本选择:https://blog.csdn.net/qq_38637558/article/details/114448690
SpringCloudAlibaba参考文档:https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html
9、我配置好nacos,然后建项目,需要注册到nacos中,总是版本不对,折腾很久,真他妈烦。看了很多文章也没解决。最后不知道怎么回事,突然就对了。
<?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> <artifactId>cloud22</artifactId> <groupId>com.jay.springcloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-provider-payment8001</artifactId> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.4</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.0.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> </dependency> <!--mysql-connector-java--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--jdbc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <dependency> <groupId>com.jay.springcloud</groupId> <artifactId>cloud-api-commons</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies> </project>
application.yml文件
server: port: 8001 spring: application: name: cloud-payment-service datasource: type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型 driver-class-name: com.mysql.cj.jdbc.Driver # mysql驱动包 url: jdbc:mysql://localhost:3306/springcloudtest?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true&failOverReadOnly=false username: root password: madeinhome cloud: nacos: discovery: server-addr: http://localhost:8848 management: endpoints: web: exposure: include: '*' mybatis: mapperLocations: classpath:mapper/*.xml type-aliases-package: com.jay.springcloud.entities
main
package com.jay.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class PaymentMain8001 { public static void main(String[] args) { SpringApplication.run(PaymentMain8001.class, args); } }
nacos天生支持负载均衡、restTemplate,因为集成了ribbon。克隆一个payment项目,端口设置8003。
10、消费者跟生产者很像。
10.1、pom增加:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>3.1.1</version> </dependency>
10.2、加了一个 @Configuration 使用 RestTemplate
package com.jay.springcloud.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 ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
10.3、使用openfeign需要增加service
package com.jay.springcloud.service; import com.jay.springcloud.common.CommonResult; import com.jay.springcloud.entities.Payment; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; /**此处需要是注册进nacos的服务名称(ServiceId),如果不一致会报错*/ @FeignClient(value = "cloud-payment-service") public interface CloudPaymentService { /**方法签名要和注册服务中的一致*/ @GetMapping(value = "/payment/get/{id}") CommonResult<Payment> getPaymentById(@PathVariable("id") Long id); }
10.4、main方法上面要增加注解 @EnableFeignClients
调用:
package com.jay.springcloud.controller; import com.jay.springcloud.common.CommonResult; import com.jay.springcloud.entities.Payment; import com.jay.springcloud.service.CloudPaymentService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.util.List; import java.util.stream.Collectors; @RestController @Slf4j public class OrderController { @Autowired private RestTemplate restTemplate; @Autowired private DiscoveryClient discoveryClient; @Autowired private CloudPaymentService cloudPaymentService; /** * 当前请求服务地址 */ private int serviceIndex; private static final String PAYMENT_SERVICE_ID = "cloud-payment-service"; /** * 轮询请求cloud-payment-service * 加入openfeign后就不能用ip加端口的方式请求了 */ @GetMapping(value = "/order/payment/get/{id}") public String getPaymentById(@PathVariable("id") Long id) { List<ServiceInstance> list = this.discoveryClient.getInstances(PAYMENT_SERVICE_ID); List<String> targetUrls = list.stream().map(serviceInstance -> serviceInstance.getUri().toString()).collect(Collectors.toList()); int size = targetUrls.size(); if (serviceIndex >= size || serviceIndex <= 0) { serviceIndex = 0; } String targetUrl = targetUrls.get(serviceIndex) + "/payment/get/" + id; String res = restTemplate.getForObject(targetUrl, String.class); serviceIndex++; return res; } /** * 使用服务名调用服务(默认轮询调用) * */ @GetMapping(value = "/order/payment/get2/{id}") public CommonResult<Payment> getPaymentById2(@PathVariable("id") Long id) { CommonResult<Payment> res = restTemplate.getForObject("http://" + PAYMENT_SERVICE_ID + "/payment/get/" + id, new CommonResult<Payment>().getClass()); return res; } /** * openfeign方式(默认轮询调用) */ @GetMapping(value = "/order/payment/get3/{id}") public CommonResult<Payment> getPaymentById3(@PathVariable("id") Long id) { return cloudPaymentService.getPaymentById(id); } }
nacos配置中心,看了很多文章,都没说详细步骤,自己搞。
1、增加引入pom
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.1.1</version> </dependency>
2、新增bootstrap.yaml,这yaml优先于application.yaml,注意 file-extension的值是 yaml,那么当新增nacos配置的时候,Data ID的后缀要和这个一样,也得是yaml
server: port: 8001 spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #Nacos作为服务中心地址 config: server-addr: 127.0.0.1:8848 file-extension: yaml application: name: cloud-payment-service #在nacos上新建配置cloud-payment-service-dev.yaml profiles: active: dev
3、新增ConfigClientController,注意加@RefreshScope,然后才能绑定nacos配置中心的配置信息。
package com.jay.springcloud.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RefreshScope //支持Nacos配置中心动态刷新功能 @RequestMapping("/config") public class ConfigClientController { //绑定的是nacos配置中心发布的配置 @Value("${config.info}") private String configInfo; @GetMapping("/info") public String getConfigInfo(){ return configInfo; } }
4、在nacos上新建配置,Data ID要和bootstrap.yaml中的spring.application.name一样,Data ID命名规则:${prefix}-${spring.profiles.active}.${file-extension}
${prefix}:是application name(cloud-payment-service)
${spring.profiles.active}:是当前开发版本spring.profiles.active(dev、test、pro)
${file-extension}:配置格式,文件的后缀名(text、json、xml、yaml、html、properties),一般就选择yaml,和bootstrap.yaml中file-extension配置的要一样。
示例:cloud-payment-service-dev.yaml
配置内容,yaml格式的配置,例如:
config: info: this is dev yaml,from nacos config center,version 1.0.1
然后发布配置。
5、启动服务,这时候访问 http://localhost:8001/config/info 就看到输出了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2021-03-15 java记录
2017-03-15 mongodb学习记录
2017-03-15 记录用
2016-03-15 抽象工厂+反射
2016-03-15 单例模式
2016-03-15 利用委托机制处理.NET中的异常