2523°

nacos入门--springboot服务注册与发现

服务注册

首先启动nacos注册中心

不明白的首先下载启动nacos 文档地址

或者看之前的文章

创建springboot项目添加nacos服务 注册依赖

pom.xml

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>nacos-discovery-spring-boot-starter</artifactId>
			<version>0.2.4</version>
		</dependency>
	</dependencies>
	

创建controller类 实现 CommandLineRunner接口

@RestController
public class ProvideController implements CommandLineRunner {

    @NacosInjected
    private NamingService namingService;

    @Value("${spring.application.name}")
    private String applicationName;

    @Value("${server.port}")
    private Integer serverPort;

    @GetMapping(path = "/hello")
    public String hello(@RequestParam(name = "name") String name) {
        return String.format("%s say hello!", name);
    }

    @Override
    public void run(String... args) throws Exception {
        // 通过Naming服务注册实例到注册中心
        namingService.registerInstance(applicationName, "127.0.0.1", serverPort);
    }
}

配置文件 指定注册中心地址

spring.application.name=provide-service
server.port=9093
nacos.discovery.server-addr=47.104.197.9:8848

启动服务 注册完成

可以到nacos后台管理界面查看服务

微信截图_20200731095718.png

服务消费着

创建springboot项目添加nacos服务依赖

pom .xml


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-discovery-spring-boot-starter</artifactId>
    <version>0.2.4</version>
</dependency>

编写测试controller

@RestController
public class consumerController{

    @NacosInjected
    private NamingService namingService;

    @GetMapping(path = "/world")
    public String world(@RequestParam(name = "name") String name) {
        // 根据服务名从注册中心获取一个健康的服务实例
        Instance instance = null;
        try {
            instance = namingService.selectOneHealthyInstance("provide-service");
        } catch (NacosException e) {
            e.printStackTrace();
        }
        RestTemplate template = new RestTemplate();
        String url = String.format("http://%s:%d/hello?name="+name, instance.getIp(), instance.getPort());
        String result = template.getForObject(url, String.class);
        return String.format("请求URL:%s,响应结果:%s", url, result);
    }

}

配置文件 添加注册中心地址


spring.application.name=consume-service
server.port=9094
nacos.discovery.server-addr=47.104.197.9:8848

访问测试如下

微信截图_20200731114935.png

创建一个类交由IOC容器管理,实现CommandLineRunner接口,重写run方法,启动后立即执行的逻辑就放在run方法中.

如果要有多个逻辑它们将默认按类名的自然顺序先后执行,用@Order(值)注解,值可以是:1,2,3指定先后顺序


已有 0 条评论

    我有话说: