几个星期前曾经分享过Nacos在配置中心部分的内容,今天来分享它的另一部分内容,即:服务发现。废话不多说,来看一下今天这篇小文章的目录结构吧:
一、概述
1.1.2> 集群级垂直化
Nacos主要提供以下四大功能:
【注】
请参见【配置中心Nacos】中Nacos的安装步骤
【注】
<properties>
<java.version>1.8</java.version>
<spring.boot>2.1.3.RELEASE</spring.boot>
<spring.cloud>Greenwich.RELEASE</spring.cloud>
<spring.cloud.alibaba>2.1.0.RELEASE</spring.cloud.alibaba>
</properties>
<dependencyManagement>
<dependencies>
<!-- 引入Spring Cloud Alibaba依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 引入Spring Cloud依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 引入Spring Boot依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Cloud Alibaba Nacos Discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Spring Cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
【注】添加Lombok、Spring Boot Web、Spring Cloud OpenFeign、Spring Cloud Alibaba Nacos Discovery的依赖。
pom
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
application.yml
server:
port: 7000
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
【注】添加nacos.discovery的配置
NacosProviderApplication
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
}
【注】添加@EnableDiscoveryClient和@EnableFeignClients注解
ProviderController
@Slf4j
@RestController
@RequestMapping("/provider")
public class ProviderController {
/**
* http://localhost:7000/provider/hello
*/
@GetMapping("/hello")
public String hello() {
log.info("provider hello");
return "provider hello";
}
}
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Cloud Alibaba Nacos Discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Spring Cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
【注】添加Lombok、Spring Boot Web、Spring Cloud OpenFeign、Spring Cloud Alibaba Nacos Discovery的依赖。
pom
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
application.yml
server:
port: 7002
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
【注】添加nacos.discovery的配置
NacosConsumerApplication
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
}
ProviderService
@FeignClient(name = "nacos-provider")
public interface ProviderService {
@GetMapping("/provider/hello")
String hello();
}
ConsumerController
@Slf4j
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Resource
private ProviderService providerService;
/**
* 基于Feign调用
* http://localhost:7002/consumer/hello
*/
@GetMapping("/hello")
public String hello() {
log.info("Feign invoke!");
return providerService.hello();
}
}
请求http://localhost:7002/consumer/hello
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
【注】添加dubbo依赖
application.yml
dubbo:
scan:
base-packages: com.muse.nacos.provider # Dubbo服务扫描基准包
protocol:
name: dubbo # dubbo 协议
port: 21880 # dubbo 协议端口 (与server.port一样,需要修改)
registry:
address: nacos://127.0.0.1:8848 # Nacos注册地址
cloud:
subscribed-services: nacos-provider
【注】添加dubbo配置。
pom依赖。添加这个module的依赖,才能扫描到该module下使用了dubbo的@Service注解的类
<dependency>
<groupId>com.muse.nacos.provider</groupId>
<artifactId>nacos-provider-application</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
OrderService接口
public interface OrderService {
/**
* 获得订单信息
*
* @return
*/
String getOrder();
}
pom依赖
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.muse.nacos.provider</groupId>
<artifactId>nacos-provider-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
添加实现类OrderServiceImpl
@Slf4j
@Service // org.apache.dubbo.config.annotation.Service
public class OrderServiceImpl implements OrderService {
public String getOrder() {
log.info("Order Info");
return "Order Info";
}
}
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
【注】添加dubbo依赖
application.yml
dubbo:
scan:
base-packages: com.muse.nacos.consumer
cloud:
subscribed-services: nacos-provider
pom.xml
<dependency>
<groupId>com.muse.nacos.provider</groupId>
<artifactId>nacos-provider-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
ConsumerController
@Slf4j
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Reference // org.apache.dubbo.config.annotation.Reference
private OrderService orderService;
/**
* 基于Dubbo调用
* http://localhost:7002/consumer/getOrder
*/
@GetMapping("/getOrder")
public String getOrder() {
log.info("getOrder invoke!");
return orderService.getOrder();
}
}
请求http://localhost:7002/consumer/getOrder
【注】serverProxy.registerService(...)方法在4.3节介绍。
【解释】
Nacos客户端有一个HostReactor类,它的功能是实现服务的动态更新,基本原理如下:
在init里会有三个任务:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有