Spring Cloud(2020.0.3) | 从入门到入土 - 27. Nacos 2.x 服务注册发现 & openFeign 远程调用

一、服务注册

这里我们需要去创建一些服务,将这些服务注册到 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他 他 = new 他()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值