一、nacos安装以及环境配置(linux)
jdk配置略
注意:jdk最好为8,避免其他多余配置
官网文档: https://nacos.io/zhcn/docs/clustermodequickstart.html1.下载安装包下载地址: https://github.com/alibaba/Nacos/releases2.解压,进入 nacos 目录3.单机启动 nacos ,执行命令bin/startup.sh ‐m standalone
访问 nocas 的管理端: http://192.168.3.14:8848/nacos ,默认的用户名密码是 nocas/nocas192.168.3.14改为你的虚拟机ip![]()
这里仅介绍最基础的nacos启动
二、springboot整合nacos实现服务注册与发现
父maven依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <modules> <module>order-nacos</module> <module>stock-nacos</module> </modules> <!--springboot的版本管理器 以后公司中开发就可以使用parent去继承公司自定义的父maven项目--> <groupId>com.tulingxueyuan.springcloud</groupId> <artifactId>springcloudalibaba</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springcloudalibaba</name> <description>Spring Cloud Alibaba</description> <packaging>pom</packaging> <properties> <java.version>1.8</java.version> <spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version> <spring.boot.version>2.3.11.RELEASE</spring.boot.version> <spring.cloud.version>Hoxton.SR8</spring.cloud.version> </properties> <dependencies> <!--SpringBoot基本场景启动--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--SpringBoot 测试的场景启动--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> <!--Spring Cloud alibaba的版本管理, 通过dependency完成继承--> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring.cloud.alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--SpringBoot的版本管理--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>${spring.boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--Spring Cloud的版本管理--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.11.RELEASE</version> </plugin> </plugins> </build> </project>
创建一个子模块stock-nacos(生产者)
依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--nacos-服务注册发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
yml
server: port: 8021 # 应用名称 (nacos会将该名称当做服务名称) spring: application: name: stock-service cloud: nacos: server-addr: IP:8848 discovery: username: nacos password: nacos # namespace: public # 相同特征的服务进行归类分组管理 # ephemeral: false # 默认=true(临时实例) 当服务宕机 超过心跳 就会将实例剔除掉 #永久实例 哪怕宕机了也不会删除实例 当服务宕机 永远不会剔除掉 #group的相同特征的服务进行归类分组管理 #weight: 通常要结合 安装 权重的负载均衡策略, 权重越高分配的流量就越大 #metadata: version=1 可以结合元数据做扩展 #cluster-name: XUSHU
controller
@RestController @RequestMapping("/stock") public class StockController { @Value("${server.port}") String port; @RequestMapping("/reduct") public String reduct() throws InterruptedException { System.out.println("扣减库存"); return "扣减库存:"+port; } @RequestMapping("/reduct2") public String reduct2() { int a=1/0; System.out.println("扣减库存"); return "扣减库存:"+port; } }
创建一个子模块order-nacos(消费者)
依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--nacos-服务注册发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
yml
server: port: 8020 # 应用名称 (nacos会将该名称当做服务名称) spring: application: name: order-service cloud: nacos: server-addr: Ip:8848 #Ip填你的虚拟机的ip discovery: username: nacos password: nacos namespace: public
启动类
@SpringBootApplication //@EnableDiscoveryClient //引入了spring-cloud-starter-alibaba-nacos-discovery依赖时,默认情况下会自动启用Nacos的服务注册和发现功能 public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class,args); } @Bean @LoadBalanced public RestTemplate restTemplate(RestTemplateBuilder builder){ RestTemplate restTemplate = builder.build(); return restTemplate; } }
调用
@Autowired RestTemplate restTemplate; @RequestMapping("/add") public String add(){ System.out.println("下单成功!"); String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class); return "Hello World"+msg; }
启动两个服务
nacos服务中心
调用order接口
文章来源:https://uudwc.com/A/DNk9W
可以看出服务间通过注册到nacos的服务名进行远程的调用文章来源地址https://uudwc.com/A/DNk9W