服务注册与发现Nacos
创建父工程,添加依赖:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> </parent> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version> <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
服务提供者:
1.pom.xml的配置
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies>
2.application.yml配置
server:
port: 56010
spring:
application:
name: provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #如果是集群且不采用域名方式配置,需要配置多个集群ip,否则无法注册成功
3.启动类
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class NacosProviderApp { public static void main(String[] args) { SpringApplication.run(NacosProviderApp.class); } }
4.服务实现
@RestController public class ProviderController { @GetMapping("/service") public String service() { return "provider invoke"; } }
服务消费者:
1.pom.xml的配置
和服务提供者一样
2.application.yml配置
server: port: 56020 spring: application: name: consumer cloud: nacos: discovery: server-addr: localhost:8848
3.启动类
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class NacosConsumerApp { public static void main(String[] args) { SpringApplication.run(NacosConsumerApp.class, args); } }
4.远程代理定义
@FeignClient(value = "provider") public interface ProviderClient { @GetMapping("/service") String service(); }
5.服务实现
@RestController public class ConsumerController { @Autowired private ProviderClient providerClient; @GetMapping("/service") public String service() { String providerResult = providerClient.service(); return "consumer invoke" + "|" + providerResult; } }
访问地址:http://127.0.0.1:56020/service 成功调用,在nacos控制台也可以看到注册的服务
应用通过Namespace、Server、Cluster(DEFAULT)的配置,描述了该服务向哪个环境(如开发环境)的哪个集群注册实例。
集群作为实例的隔离,相同集群的实例才能相互感知。
namespace、cluster-name若不填写都将采取默认值,namespace的默认是public命名空间,cluster-name的默认值为DEFAULT集群。