栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

    org.springframework.boot
    spring-boot-starter-web



    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery
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 test() throws Exception {
		Map result = new HashMap();
		result.put("code", 200);
		result.put("msg", "success");
		
		System.out.println("服务 B 被远程调用了");
		
		return result;
	}
服务 A pom

    org.springframework.cloud
    spring-cloud-starter-openfeign



    org.springframework.cloud
    spring-cloud-loadbalancer

这里一定要加这个 loadbalancer !!!

原因:No Feign Client for loadBalancing defined. lemon1234.com | Java技术热点 - Java知识资源网

Service
@FeignClient(name = "nacos-b")
public interface TestFeignService {

	@GetMapping("/test")
	Map test() throws Exception;
}
Controller
@RestController
@RequestMapping("/a")
public class TestController {

	@Autowired
	private TestFeignService testFeignService;
	
	@RequestMapping("/test")
	public Map 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 test() throws Exception {
		Map result = new HashMap();
		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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号