当前位置: 首页 > 后端技术 > Java

SpringCloud微服务实践——nacos服务注册中心搭建(附源码)

时间:2023-04-02 09:14:16 Java

注册中心作为微服务的基本功能之一,有着举足轻重的作用。微服务将单个服务拆分成不同模块下的服务,如果不同模块的服务进行通信调用怎么办?这需要服务注册和发现。本文将使用阿里巴巴开源项目nacos搭建服务中心。Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一套简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据和流量管理。Nacos帮助您更敏捷、更轻松地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构(如微服务范式、云原生范式)的服务基础设施。下载安装nacos在nacos官网找到nacos安装包,下载如下图所示的gz后缀文件。解压文件并进入bin目录,执行以下命令。shstartup.sh-mstart成功创建新的springboot项目buildserviceproducer添加maven依赖org.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.bootspring-boot-starter-testtest配置application.yml文件server:port:8020spring:application:name:service-providercloud:nacos:discovery:server-addr:127.0.0.1:8848在Application.java启动文件中添加@EnableDiscoveryClient注解@SpringBootApplication@EnableDiscoveryClientpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,参数);}}添加服务提供的接口@RestControllerpublicclassProviderController{@AutowiredprivateEnvironment环境;@GetMapping("/hello")publicStringhello(Stringname){return"hello4"+name+"port:"+environment.getProperty("local.server.port");}}启动上面的服务(Application.java中的main方法),启动成功后登录nacos控制台http://127.0.0.1:8848/nacos,默认登录名和密码都是nacos,可以发现有很多服务列表如果创建了一个服务,说明服务提供者已经在服务中心注册成功。请求访问http://127.0.0.1:8020/hello,返回数据成功,说明服务可以正常访问。构建服务消费者并添加maven依赖org.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-netflix-ribbonorg.springframework.cloudspring-cloud-starter-openfeignorg.springframework.cloudspring-cloud-starter-alibaba-nacos-discovery复制代码org.springframework.bootspring-boot-starter-testtest这里相对于服务提供者,多加了丝带和假装依赖。配置application.yml文件server:port:8030spring:application:name:service-consumecloud:nacos:discovery:server-addr:127.0.0.1:8848修改Application.java文件,添加注册@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublicclassNacosConsumeApplication{publicstaticvoidmain(String[]args){SpringApplication.run(NacosConsumeApplication.class,args);}}这里添加@EnableDiscoveryClient注解和@EnableFeignClients,其中@EnableDiscoveryClient是将服务注册到注册中心,@EnableFeignClients是配合feignclient使用。启动上述服务(Application.java中的main方法)。启动成功后,登录nacos控制台,发现注册中心也已经注册了消费者服务。调用服务有两种方式:feign和ribbon1。使用feign调用服务配置客户端@FeignClient(value="service-provider")publicinterfaceProductClient{@GetMapping("/hello")Stringproduct(@RequestParam("name")Stringname);}这里,@FeignClient中的配置值对应服务提供者的服务名称,@GetMapping中的值对应服务提供者的@GetMapping路径。Calltheserver@RestControllerpublicclassFeignController{//这个错误是编译器的问题。因为这个bean是在程序启动的时候注入的,编译器无法感知,所以报错。@AutowiredprivateProductClientproductClient;@GetMapping("/feign")publicStringfeign(Stringname){returnproductClient.product(name);}}使用ribbon调用服务人员配置RestTemplatebean@ConfigurationpublicclassRibbonConfig{@LoadBalanced@BeanpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}调用服务@RestControllerpublicclassRibbonController{@AutowiredprivateRestTemplaterestTemplate;@GetMapping("/ribbon")publicStringribbon(Stringname){Stringresult=restTemplate.getForObject("http://service-provider/hello?name="+name,String.class);返回结果;}}源码github源码