1. 运行nacos
1.1启动nacos
首先安装nacos,安装完成后,到bin目录下启动startup.cmd(我是windows)
1.2查看网站
访问
http://localhost:8848/nacos
用户名:
nacos
密码:
nacos
登陆成功,展示如图
2.建立父项目,子模块provider,consumer
2.1建立父项目springcloud-study
删除多余的文件
2.2 建立子模块nacos-provider
添加如下依赖springboot相关
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
springcloud相关依赖
<!-- SpringCloud的依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.3 添加子模块nacos-consumer
添加SpringBoot相关的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine -->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
SpringCloud相关的依赖
<!-- SpringCloud的依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.3</version>
<!-- <version>Hoxton.SR12</version>-->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.4注意SpringBoot和SpringCloud的版本要匹配
具体可以看这篇博客
SpringBoot和SpringCloud版本比匹配报错解决方式
3.子模块进行配置
3.1配置
3.1.1 nacos-provider配置
1.启动类上添加服务注册发现注解
@EnableDiscoveryClient //开启服务注册发现功能
2.配置文件application.properties
server.port=8070
#nacos服务地址
spring.application.name=nacos-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#指定热部署端口,具体视自己情况而定,只要不重复就可以
spring.devtools.livereload.port=35729
3.1.2 nacos-consumer配置
1.启动类上添加注解
@EnableDiscoveryClient //开启服务注册发现功能
@EnableFeignClients //远程调用
2.配置文件application.properties
server.port=8071
spring.application.name=nacos-consumer
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#一个项目启动多个项目执行热部署时,热部署的35729端口会重复,因此指定端口。具体视自己情况而定,只要不重复就可以
spring.devtools.livereload.port=35730
3.1.3额外
为避免警告两个子模块的resources目录下都建立
config.properties
文件
3.2 运行,网站查看
4.编写controller,及远程调用feign
4.1 nocas-provider
这个是到时候被nacos-cosumer通过feign调用的方法
@RestController
@RequestMapping("/nacos/provider")
public class ProviderController {
@RequestMapping("/hello")
public String hello(){
return "你好,我是服务提供者nacos-provider";
}
}
4.2 nocas-consumer
ProviderFeign接口
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "nacos-provider")//指定远程调用方的名字
public interface ProviderFeign {
/**
* ProviderFeign的hello()方法
*会调用nacos-provider中"/nacos/provider/hello"指定的路径controller内的方法,
* @return
*/
@RequestMapping("/nacos/provider/hello")//路径一定写全路径
public String hello();
}
ConsumerController类
@RequestMapping("/nacos/consumer")
@RestController
public class ConsumerController {
@Resource
private ProviderFeign providerFegin;
/**
* /nacos/consumer/hello-provider 会调用/nacos/provider/hello
* @return
*/
@RequestMapping("/hello-provider")
public String hi(){
return providerFegin.hello();
}
}