SpringBoot使用Nacos服务发现
本文介绍SpringBoot应用使用Nacos服务发现。
上一篇文章介绍了SpringBoot使用Nacos做配置中心,本文介绍SpringBoot使用Nacos做服务发现。
1.Eureka闭源
相信到现在,Eureka 2.0 闭源已经不是什么新鲜事了。在2017-2018年,几乎在国内掀起了一阵SpringCloud的热潮,几乎很大一部分人群随着对SpringBoot的关注,都开始关注起来了SpringCloud。而由于Eureka注册中心的易整合等优点,更是大多数使用SpringCloud的首选注册中心。但是随着Eureka官网的宣告,如下。
大致意思就是开源工作已经停止之类的话,这里就不做介绍了,感兴趣可以上Eureka的Github地址上查看https://github.com/Netflix/eureka/wiki。
Nacos也是一个优秀的注册中心,并且由阿里巴巴开源,并且最近的热度很高,已经更新到0.8.0版本了,基本上更新的很频繁,也是一个Eureka闭源后的好的选择。
2.SpringBoot使用Nacos服务发现
首先,需要启动Nacos,这里不做过多介绍。
创建项目,加入Nacos的服务发现的依赖nacos-discovery-spring-boot-starter,完整pom如代码清单所示。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dalaoyang</groupId>
<artifactId>springboot2_nacos_discovery</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot2_nacos_discovery</name>
<description>springboot2_nacos_discovery</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.boot/nacos-config-spring-boot-starter -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件配置Nacos服务的地址,如代码清单所示。
server.port=8080
spring.application.name=springboot2-nacos-discovery
nacos.discovery.server-addr=127.0.0.1:8848
SpringBoot使用Nacos服务发现需要想Nacos服务注册,可以选择使用Nacos Api来直接注册,如代码清单所示。
//curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=springboot2-nacos-discovery&ip=127.0.0.1&port=8080'
本文使用注解@PostConstruct,在服务启动后向Nacos服务注册,并且创建方法根据实例名称获取实例,完整启动类如代码清单所示。
package com.dalaoyang;
import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
import java.net.InetAddress;
import java.util.List;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
//curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=springboot2-nacos-discovery&ip=127.0.0.1&port=8080'
@SpringBootApplication
@RestController
public class Springboot2NacosDiscoveryApplication {
@NacosInjected
private NamingService namingService;
@Value("${server.port}")
private int serverPort;
@Value("${spring.application.name}")
private String applicationName;
@PostConstruct
public void registerInstance() throws NacosException{
namingService.registerInstance(applicationName,"127.0.0.1",serverPort);
}
@RequestMapping(value = "/getInstance", method = GET)
@ResponseBody
public List<Instance> getInstance(@RequestParam String serviceName) throws NacosException {
return namingService.getAllInstances(serviceName);
}
public static void main(String[] args) {
SpringApplication.run(Springboot2NacosDiscoveryApplication.class, args);
}
}
本文用到了两个Nacos的方法,如下:
- registerInstance:注册实例,有多个方法,本文使用的方法需要传入三个参数,分别是:服务名,ip和端口号。
- getAllInstances:获取实例,传入服务名。
到这里就配置完成了,启动项目,查看Nacos服务如图所示。
在浏览器访问http://localhost:8080/get?serviceName=springboot2-nacos-discovery,如图所示,也可以查询到刚刚注册的实例。
还有很多Nacos Api供我们使用,可以查看Nacos Api页面:https://nacos.io/zh-cn/docs/open-API.html
SpringBoot使用Nacos服务发现的更多相关文章
- SpringCloud使用Nacos服务发现实现远程调用
本文使用SpringCloud结合Nacos服务发现,Feign远程调用做一个简单的Demo. 1 Nacos 关于Nacos之前写了两篇文章关于SpringBoot对它的使用,感兴趣可以查看一下. ...
- SpringCloud之Nacos服务发现(十七)
一 Nacos简介 Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现.配置和管理. Nacos主要提供以下四大功能: 服务发现与服务健康检查 Nacos使服务更容易注册自己并 ...
- Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理
随着微服务概念的流行,越来越多的公司采用`Spring Cloud`全家桶构建微服务系统,实现业务的快速迭代.`Spring Cloud`提供了快速构建分布式微服务常用组件,包括`Spring Clo ...
- Spring Cloud Alibaba学习笔记(2) - Nacos服务发现
1.什么是Nacos Nacos的官网对这一问题进行了详细的介绍,通俗的来说: Nacos是一个服务发现组件,同时也是一个配置服务器,它解决了两个问题: 1.服务A如何发现服务B 2.管理微服务的配置 ...
- Alibaba Nacos 服务发现组件集群部署
前面学习了单机模式下的启动,生产环境中部署nacos肯定是使用集群模式cluster保证高可用. 官方文档的集群部署推荐使用VIP+域名模式,把所有服务列表放到一个vip下面,然后挂到一个域名下面. ...
- Nacos服务发现源码解析
1.Spring服务发现的统一规范 Spring将这套规范定义在Spring Cloud Common中 discovery包下面定义了服务发现的规范 核心接口:DiscoveryClient 用于服 ...
- Nacos服务发现
基础配置初始化 NacosDiscoveryClientConfiguration NacosDiscoveryProperties 初始化Nacos基础配置信息的bean,主要指yaml中配置Nac ...
- 配置中心Nacos(服务发现)
服务演变之路 单体应用架构 在刚开始的时候,企业的用户量.数据量规模都⽐较⼩,项⽬所有的功能模块都放在⼀个⼯程中编码.编译.打包并且部署在⼀个Tomcat容器中的架构模式就是单体应用架构,这样的架构既 ...
- Nacos 解读:服务发现客户端
Nacos是阿里巴巴的微服务开源项目,用于服务发现和配置管理,开源以来我就一直关注,在此准备以几篇文章来窥其全貌,但大段大段贴代码就没必要了,这里用自己的一些理解和总结来帮助大家理解.文章将基于截止目 ...
随机推荐
- Java【第八篇】面向对象之高级类特性
static 关键字 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用.我们有 ...
- Linux-监控目录及文件
Linux-通过inotifywait监控目录及文件 inotifywait命令的使用此处就不写了:可以参考文章:https://www.cnblogs.com/martinzhang/p/41269 ...
- mysql shell 定时备份
#!/bin/sh if [ ! -d "/data/backup" ]; then mkdir -p /data/backup fi db_user=" ...
- Spring security oauth2 client_credentials认证 最简单示例代码
基于spring-boot-2.0.0 1,在pom.xml中添加: <!-- security --> <!-- https://mvnrepository.com/artifac ...
- 测试框架httpclent 3.获取cookie的信息,然后带cookies去发送请求
在properties文件里面: startupWithCookies.json [ { "description":"这是一个会返回cookies信息的get请求&qu ...
- java.io包下适配和装饰模式的使用
如java.io.LineNumberInputStream(deprecated),是装饰模式(decorate)的实现: 如java.io.OutputStreamWriter,是适配器模式(ad ...
- vim与程序员
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...
- python之路(2)集合(set)和字符串格式化
目录 集合(set) 字符串的格式化(%和format) 集合(set) {‘a’,'b','c','d','e'} 定义:有不同元素组成的集合,集合的元素为不可变类型(数字,字符串,元组),集合是一 ...
- 第三节:ThreadPool的线程开启、线程等待、线程池的设置、定时功能
一. ThreadPool简介 ThreadPool简介:ThreadPool是一个线程池,当你需要开启n个线程时候,只需把这个指令抛给线程池,它将自动分配线程进行处理,它诞生于.Net 2.0时代. ...
- 前端面试题整理—jQuery篇
1.为什么使用jquery,他有哪些好处? 1)轻量级.代码简洁 2)强大的选择器,出色的DOM操作封装 3)有可靠的事件处理机制 4)浏览器兼容性好 5)支持链式操作 6)支持丰富的插件 2.jqu ...