废话
大致流程其实跟SpringCloud + Eureka没太大区别,主要的坑就在于内嵌的负载均衡需要从默认的Ribbon升级为Loadbalancer
准备工作
1、搭一个Nacos
https://nacos.io/zh-cn/docs/quick-start.html
直接按照上方链接的官网教程安装一个单机版的Nacos,具体过程不在赘诉。
需要注意的是,安装Maven的时候,记得将数据源切换成阿里云的或者其他国内云的镜像地址,不然的话在构建的时候有可能有些包找不到。
//打开maven根目录的conf文件夹,打开settings.xml文件,在合适的地方加上下面这一段
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
2、准备两个SpringCloud项目
一个做服务提供者,一个做消费者
开搞
1、导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
<!-- 使用spring loadbalancer,弃用ribbon -->
<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-loadbalancer</artifactId>
</dependency>
2、application.yml配置,两者之间的区别就在于服务名称
spring:
application:
#name: test-server #服务提供者
name: test-service #消费者
cloud:
nacos:
discovery:
server-addr: 192.168.2.200:8848
loadbalancer:
ribbon:
enabled: false #禁用ribbon
3、入口Application类加上注解
@EnableDiscoveryClient
@EnableFeignClients
@ComponentScan(basePackages = ("com.xx.xx.*"))//自己改成你的包名
@SpringBootApplication
4、编写一个服务提供接口(服务提供者端)
@RestController
public class TestController {
@RequestMapping(value = "/test", method = {RequestMethod.POST, RequestMethod.GET})
@ResponseBody
public String test(String str) {
log.error("服务者:"+str);
return "测试接口:" + str;
}
}
5、新建一个消费接口(消费者端)
微服务消费服务主要有三种方式(WebClient、RestTemplate、Feign),我这里用的是Feign,感觉这个用起来舒服点,至于这三个东西的性能方面有没有区别,我也不知道,如果你知道,请告诉我一声。
@Component
@FeignClient(value = "test-server") //对应服务提供者的ID
public interface TestService {
@GetMapping(value = "/test")
String test(@RequestParam(name = "str") String str);
}
6、新建一个接口消费服务(消费者端)
@Slf4j
@RestController
public class TestController {
@Autowired
TestService testService;
@RequestMapping(value = "/test", method = {RequestMethod.POST, RequestMethod.GET})
@ResponseBody
public String test(String str) {
log.error("消费者:" + str);
return testService.test(str);
}
}
完事,自行调一下消费者端的test接口即可。