一、服务注册
这里我们需要去创建一些服务,将这些服务注册到 Nacos 中。
父项目
父项目搭建去参考我另外的这个博客,里面有一个父项目版本依赖。
Spring Cloud(2020.0.3) | 从入门到入土 - 2. 微服务基础项目搭建_胖子胖子大胖子的博客-CSDN博客
服务 A 搭建
服务名称:microservice-service-nocos-a-4000
pom
<!-- Web 支持 -->
<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>
yml
server:
port: 4000
servlet:
context-path: /
tomcat:
uri-encoding: UTF-8
spring:
application:
name: nacos-a
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
这里需要配置 Nacos Server 的地址
启动类
@EnableDiscoveryClient
@SpringBootApplication
public class NacosAServerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosAServerApplication.class, args);
}
}
启动类上要增加一个注解:@EnableDiscoveryClient,该注解是开启服务注册
启动项目,登录到 Nacos,点击服务列表
可以看到,我们刚刚的这个 nacos-a 的服务就注册到 Nacos 中了。
二、openFeign 远程调用服务
这里我们再去创建一个和服务 A 类似的服务(自己去创建一个 B),并且注册到 Nacos 中。
我们在 B 服务模块中增加一个请求,到时候 A 通过 openFeign 进行远程调用。
服务 B Controller
@GetMapping("/test")
public Map<String, Object> test() throws Exception {
Map<String, Object> result = new HashMap<String, Object>();
result.put("code", 200);
result.put("msg", "success");
System.out.println("服务 B 被远程调用了");
return result;
}
服务 A
pom
<!-- openFeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- loadbalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
这里一定要加这个 loadbalancer !!!
原因:No Feign Client for loadBalancing defined. lemon1234.com | Java技术热点 - Java知识资源网
Service
@FeignClient(name = "nacos-b")
public interface TestFeignService {
@GetMapping("/test")
Map<String, Object> test() throws Exception;
}
Controller
@RestController
@RequestMapping("/a")
public class TestController {
@Autowired
private TestFeignService testFeignService;
@RequestMapping("/test")
public Map<String, Object> test() throws Exception {
return testFeignService.test();
}
}
启动类
启动类中增加开启 OpenFeign 的注解:@EnableFeignClients
测试
浏览器进行请求:http://localhost:4000/a/test
可以看到,服务是正常的,再来看 Console 窗口。
也是没有问题的。
三、多实例服务负载均衡
这里我们再去创建一个服务 C,C 的话需要和 B 一样,需要给 A 提供服务。
服务 C
服务名称:microservice-service-nocos-c-4002
pom
和 B 一样
yml
server:
port: 4002
servlet:
context-path: /
tomcat:
uri-encoding: UTF-8
spring:
application:
name: nacos-b
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
这里的 spring.application.name 需要和服务 B 的实例名称要相同。
Controller
@RestController
public class TestController {
@GetMapping("/test")
public Map<String, Object> test() throws Exception {
Map<String, Object> result = new HashMap<String, Object>();
result.put("code", 200);
result.put("msg", "success");
System.out.println("服务 C 被远程调用了");
return result;
}
}
启动类
@EnableDiscoveryClient
@SpringBootApplication
public class NacosCServerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosCServerApplication.class, args);
}
}
测试
启动服务 C,来看一下服务是否正常上线。
是没有问题的,现在我们来进行请求测试,来看看服务是如何调用的。
通过查看 Console,我们可以发现服务是轮询提供的。
接下来我们去修改一下 nacos-b 服务的权重
我们将其中的一个权重修改的大一点。我这里改成一个是 1,一个是 3。(点击编辑,修改完成权重后,不需要再进行重启什么了)
再来进行请求服务~~~,但是通过 Console 日志查看,这个并没有造成一个请求变多,一个变少(还是服务轮训状态)。
接着我们将一个服务的权重设置成 0,另外一个不变。再进行请求,可以发现,权重是 0 的服务就不再提供服务了。
这一讲就讲到这里,有问题可以联系我:QQ 2100363119,欢迎大家访问我的个人网站:https://www.lemon1234.com