Spring Cloud Alibaba 使用nacos 注册中心

### 背景
上一文我们讲到了如何去搭建注册中心,这一次我们讲述如何使用nacos作为注册中心

### spring-cloud-alibaba-basis 创建基础依赖
首先我们创建一个spring-cloud-alibaba-basis 基础依赖 工程里面制定我们要用到的公用的版本
- spring boot 版本 2.1.7.RELEASE
- spring cloud 版本 Greenwich.RELEASE
- spring cloud 阿里巴巴的版本 2.1.0.RELEASE
- Spring IO Platform 版本依赖
```
4.0.0

com.xian.cloud
spring-cloud-alibaba-basis
pom
1.0-SNAPSHOT

spring cloud alibaba 总pom
spring cloud alibaba 教程总pom版本控制

cloud-discovery-server
cloud-discovery-client-common

UTF-8
1.8
1.8
1.8

2.1.0.RELEASE
Greenwich.RELEASE
2.1.7.RELEASE
Cairo-SR8

com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import

org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import

org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import

io.spring.platform
platform-bom
${spring-platform.version}
pom
import

com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery

org.springframework.boot
spring-boot-starter-web

org.projectlombok
lombok
true

```

Spring IO Platform 这个jar包有兴趣的同学可以去关注一下他里面进行了第三方常用jar包的版本管理。每个spring 对应的第三方jar版本都罗列在上面了。这样方便我们对于第三方jar包的版本管理。#为了解决jar包版本冲突而存在
sping boot 除了提供我们熟知的 方式以外 还有spring-boot-dependencies 依赖方式。

这样我们在新建俩个module

### 服务提供者 cloud-discovery-server
```

com.xian.cloud
spring-cloud-alibaba-basis
1.0-SNAPSHOT

cloud-discovery-server
服务提供者
服务提供者

```
因为我们在父类的pom里面定义了公共依赖的jar包,所以我们不需要再次引入jar包只需要制定parent pom就可以继承这些jar包。同样下面的消费者服务我也会同样如此利用maven的jar包传递方式进行案例的开发

创建服务启动类 和对外服务的controller 类
- 启动类

```
package com.xian.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @Author: xlr
* @Date: Created in 2:44 PM 2019/10/27
*/
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryServerApplication {

public static void main(String[] args) {
SpringApplication.run(DiscoveryServerApplication.class, args);
}
}
```
- 对外提供服务的http接口

```
package com.xian.cloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
* @Author: xlr
* @Date: Created in 2:57 PM 2019/10/27
*/
@RestController
@RequestMapping("server")
@Slf4j
public class DiscoverCotroller {

/**
* 对外提供的服务 HTTP接口
* @param name
* @return
*/
@GetMapping("/hello")
public String hello(@RequestParam String name) {
log.info("invoked name = " + name);
return "hello " + name;
}

}

```
编写YAML文件
```
server:
port: 9012

spring:
profiles:
active: dev
application:
name: cloud-discovery-server
cloud:
nacos:
discovery:
server-addr: 47.99.209.72:8848
```
### 服务消费者 cloud-discovery-client

```

spring-cloud-alibaba-basis
com.xian.cloud
1.0-SNAPSHOT

4.0.0
cloud-discovery-client
服务消费者
```

创建服务启动类 和调用服务提供者的的controller http接口
- 启动类

```

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
* @Author: xlr
* @Date: Created in 3:03 PM 2019/10/27
*/
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryClientApplication {

public static void main(String[] args) {
SpringApplication.run(DiscoveryClientApplication.class, args);
}
}

```

- 消费者服务接口

```
package com.xian.cloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
* @Author: xlr
* @Date: Created in 3:04 PM 2019/10/27
*/
@RequestMapping("client")
@RestController
@Slf4j
public class DiscoveryClientController {

//服务提供者 项目名称 spring.application.name
public static final String CLOUD_DISCOVERY_SERVER = "cloud-discovery-server";

/**
* 在Spring Cloud Commons中提供了大量的与服务治理相关的抽象接口,包括DiscoveryClient、LoadBalancerClient等。
* 从LoadBalancerClient接口的命名中,是一个负载均衡客户端的抽象定义
*/
@Autowired
private LoadBalancerClient loadBalancerClient;

@RequestMapping(value = "/test",method = RequestMethod.GET)
public String test() {
ServiceInstance serviceInstance = loadBalancerClient.choose(CLOUD_DISCOVERY_SERVER);
log.info( "ServiceInstance :{}",serviceInstance );
String url = serviceInstance.getUri() + "/server/hello?name=" + "tom";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);
return "调用 " + url + ", 返回 : " + result;
}
}

```

编写YAML文件
```
server:
port: 9011

spring:
profiles:
active: dev
application:
name: cloud-discovery-client
cloud:
nacos:
discovery:
server-addr: 47.99.209.72:8848
```

然后启动服务
查看nacos控制台
![file](https://img2018.cnblogs.com/blog/1848187/201910/1848187-20191027155456017-1812277925.png)

显示俩个服务都已经注册到了 nacos注册中心

然后我们就请求http://localhost:9011/client/test 看看是否能够显示我们想要的结果
![file](https://img2018.cnblogs.com/blog/1848187/201910/1848187-20191027155456496-335411897.png)

到此时已经完成了我们注册中心。可以在提供服务者处改变端口是否能进行负载均衡

服务端又分别启动了 9013、9014俩个端口 服务
![file](https://img2018.cnblogs.com/blog/1848187/201910/1848187-20191027155457224-1761994209.png)

再次进行测试http://localhost:9011/client/test

![file](https://img2018.cnblogs.com/blog/1848187/201910/1848187-20191027155458886-1375865558.png)

到此时我的注册中心、负载均衡已经全部实现完毕。

### 参考资料
[nacos官方文档](https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html)

[spring cloud alibaba 官方文档](https://github.com/alibaba/spring-cloud-alibaba/)

示例代码

[github](https://github.com/HPxianliru/Spring-cloud-alibaba-basis)

如何喜欢可以关注分享本公众号。
![file](https://img2018.cnblogs.com/blog/1848187/201910/1848187-20191027155459543-868503189.jpg)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。转载请附带公众号二维码

原文地址:https://www.cnblogs.com/cloudxlr/p/11747800.html

时间: 2024-10-10 23:07:34

Spring Cloud Alibaba 使用nacos 注册中心的相关文章

spring cloud实战 1-高可用注册中心

创建父maven项目 提交代码至GitHub 创建eureka-server-1 项目搭建两种方式: 父pom中继承spring-boot-starter-parent,子pom中直接结成父pom.该方式比较方便,但子项目都是spring boot项目了. 父项目不需要继承spring-boot-starter-parent,子pom中通过使用scope = import依赖关系. 123456789101112 <dependencyManagement> <dependencies&

初始化Spring Cloud建立Eureka服务注册中心

1.新建项目 https://gitee.com/frankawp/vishnu  新建一个git项目 打开git bash git clone https://gitee.com/frankawp/vishnu git remote add vishnu https://gitee.com/frankawp/vishnu touch test git add . git commit -m initial git push origin master 初始化git完毕 刷新https://gi

Spring Cloud Eureka 高可用注册中心

参考:<<spring cloud 微服务实战>> 在微服务架构这样的分布式环境中,各个组件需要进行高可用部署. Eureka Server 高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样就形成一组相互注册的服务注册中心,以实现服务清单的相互同步,达到高可用的效果. 构建双节点服务注册中心集群       构建节点服务注册中心集群: 1.创建application-peer1.properties , 作为peer1服务中心的配置,并将serviceUrl指向pee

Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解

前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate.WebClient.Feign)> <Spring Cloud Alibaba基础教程:使用Nacos作为配置中心> 上一篇,我们学习了如何在Nacos中创建配置,以及如何使用Spring Cloud Alibaba的Nacos客户端模块来加载配置.在入门例子中,我们只配

Spring Cloud Alibaba之服务发现组件 - Nacos

服务发现 为了实现多个微服务之间的调用,我们除了需要Feign这种调用组件外还得依赖服务发现组件.主要的原因是每个微服务所在的机器ip并非总是固定的,并且每个微服务都可能部署多个实例在不同的机器上,所以我们不能把依赖的微服务ip地址写在代码或配置文件里,我们需要有个组件去动态的管理,这就是为什么微服务架构里服务发现功能是必须的. 那么服务发现组件是怎么实现服务发现的呢?我们以大家比较熟悉的MySQL来做类比,通过MySQL简单说明一下服务发现机制的实现.如下图: 简单说明一下什么是服务提供者与服

Spring Cloud Alibaba 新一代微服务解决方案

本篇是「跟我学 Spring Cloud Alibaba」系列的第一篇, 每期文章会在公众号「架构进化论」进行首发更新,欢迎关注. 1.Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合. 马老师左手双十一,右手阿里开源组件,不仅占据了程序员的购物车,还要攻占大家的开发工具. 先说说 Spring Cloud 提起微服务,不得不提 Spring Clou

Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭借阿里中间件团队的背景,还是得到不少团队的支持:同时,由于Spring Cloud Alibaba中的几项主要功能都直指Netflix OSS中的重要组件,而后者最近频繁宣布各组件不在更新新特性,这使得Spring Cloud Alibaba关注度不断飙升,不少开发者或团队也开始小范围试水.笔者对此

Spring Cloud Alibaba nacos 配置中心使用

背景 上一文我们讲到了如何去搭建注册中心,这一次我们讲述如何使用nacos作为注册中心 spring-cloud-alibaba-basis 创建基础依赖 首先我们创建一个spring-cloud-alibaba-basis 基础依赖 工程里面制定我们要用到的公用的版本 spring boot 版本 2.1.7.RELEASE spring cloud 版本 Greenwich.RELEASE spring cloud 阿里巴巴的版本 2.1.0.RELEASE Spring IO Platfo

Spring Cloud Alibaba 实战 之 Nacos 服务注册和发现

服务注册与发现,服务发现主要用于实现各个微服务实例的自动化注册与发现,是微服务治理的核心,学习 Spring Cloud Alibaba,首先要了解框架中的服务注册和发现组件——Nacos. 一.Spring Cloud 服务注册和发现组件 1.Spring Cloud Eureka 闭源风波 在Spring Cloud的子项目中,Spring Cloud Netflix提供了Eureka来实现服务的发现功能,Eureka的服务发现包含两大组件: 服务端发现组件(EurekaServer)和客户