【SpringCloudAlibaba】怎样用Nacos来实现服务注册中心呢

之前我们是用Eureka来实现服务注册中心的(关于Eureka实现注册中心的博客链接:一步一步进行搭建Eureka,实践中理解Eureka),那么Nacos该怎么实现服务注册中心呢
关于Nacos实现服务注册中心,我们不在需要单独建一个eureka的项目的,只有生产者和消费者一些服务项目就可以了
项目结构如下
在这里插入图片描述
在将项目注册到naocos之前,先将nacos启动起来,上边博客已经讲了nacos如何安装与启动,因为我们的项目要向nacos上注册,它需要nacos先启动起来,然后我们新建的项目向里边注册,在配置文件配置的127.0.0.1:8848正是我们所启动起来的nacos
接下来就来实现下将服务注册到Naocs了

一、服务提供者

在这里插入图片描述

1、引入相应依赖

 <dependencies>
   <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>0.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

2、编写配置文件

application.yml

server:
  port: 8082
spring:
  application:
    name: producer-demo
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

3、编写启动文件

@SpringBootApplication
@EnableDiscoveryClient
public class ProducerDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerDemoApplication.class, args);
    }
}
  • @SpringBootApplication 是启动注解
  • @EnableDiscoveryClient是将此项目标记为Naocs客户端

4、编写controller

@RestController
public class ProducerController {
    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "getServerPort")
    public String getServerPort(String id) {
        return "本服务的端口号是:" + serverPort + " ,参数id :" + id;
    }
}

5、启动项目,可以更换端口号,启动俩次,这样就可以模拟俩个服务了

我在application.yml文件中更改端口后,一次是8081,然后启动,一次是8082启动
在这里插入图片描述

6、结果

项目启动成功后可以看到已经成功注册到nacos上了
在这里插入图片描述
直接访问服务提供者对应的地址
在这里插入图片描述
看到这样的结果,代表生产者已经建立好了

其实到此为止,已经实现了将服务注册到Nacos上了,接下来实现下消费者,为的是在使用nacos作为注册中心后,注册到nacos上的服务能否被其他服务获取到呢,答案是肯定的。那么该怎么进行服务间调用,消费者该如何调用生产者呢,其实和之间SpringCloud是一样的,用的是openfeign,也可以用RestTemplate的方式调用。我这里就直接用openfeign了。
关于使用RestTemplate和使用Feign的方式的区别,服务调用Feign是什么,可参考博客:
服务调用Feign是什么呢,又该如何用呢?

二、消费者

在这里插入图片描述

1、引入相关依赖

<dependencies>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
         <version>0.2.2.RELEASE</version>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-openfeign</artifactId>
     </dependency>
 </dependencies>

2、编写配置文件

server:
  port: 8091
spring:
  application:
    name: consumer-demo
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

3、编写启动文件

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerDemoApplication.class, args);
    }
}
  • @SpringBootApplication 是启动注解
  • @EnableDiscoveryClient是将此项目标记为Nacos客户端
  • @EnableFeignClients是开启feign功能

4、写一个接口,表明要调用的服务

接口里的方法正是生产者里调用的方法

@FeignClient("producer-demo")
public interface OpenFeignClient {
    @GetMapping(value = "getServerPort")
    public String getServerPort(@RequestParam("id") String id);
}

5、编写controller

@RestController
public class ConsumerController {
    @Autowired
    private OpenFeignClient openFeignClient;

    @GetMapping("getProducer")
    public String getProducer(String id) {
        String serverPort = openFeignClient.getServerPort(id);
        return serverPort;
    }
}

6、启动,访问消费者地址

http://127.0.0.1:8091/getProducer?id=2
在这里插入图片描述
可以看到访问消费者这个地址时成功调用了生产者里的接口,因为生产者启动了俩个,所以它有时调用是8081的,有时是8082的,可见还实现了负载均衡,它默认的负载均衡策略是轮询,所以我们访问的时候一次是8081一次是8082这样子的。

到此,将服务注册到Nacos上,以及使用已经注册到Naocs上的服务,已经通过一个小例子简单实现了,有没有感觉还是挺简单的呢,有什么不足的地方欢迎大家指教

©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页