Spring Cloud Alibaba教程:使用Nacos作为服务注册发现组件

什么是Nacos?

       Nacos 致力于帮助您发现配置管理微服务Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现服务配置服务元数据流量管理
       Nacos Spring Cloud A 中的服务注册发现组件,类似于ConsulEureka,同时它又提供了分布式配置中心的功能,这点和Consulconfig类似,支持热加载。

1、Nacos 的关键特性包括:

  • 服务发现和服务健康监测
  • 动态配置服务,带管理界面,支持丰富的配置维度。
  • 动态 DNS 服务
  • 服务及其元数据管理

2、Nacos下载

       Nacos依赖于Java环境,所以必须安装Java环境。然后从官网下载Nacos的解压包,安装稳定版的,下载地址:https://github.com/alibaba/nacos/releases。

       本次案例下载的版本为1.1.4 ,下载完成后,解压,在解压后的文件的/bin目录下,windows系统点击startup.cmd就可以启动Nacos

       启动时会在控制台,打印相关的日志。Nacos的启动端口为8848,在启动时要保证端口不被占用。珠穆拉马峰的高度是8844Nacos的端口是8848,有点巧合。

       启动成功,在浏览器上访问:http://localhost:8848/nacos,会跳转到登陆界面,默认的登陆用户名为nacos,密码也为nacos。登陆成功后,展示的界面如下:

       从界面可知,此时没有服务注册到Nacos上。

使用Nacos服务注册和发现

       服务注册发现是微服务治理的根基,服务注册和发现组件是整个微服务系统的灵魂,选择合适的服务注册和发现组件至关重要,目前主流的服务注册和发现组件有ConsulEurekaEtcd等。随着Eureka的闭源Spring cloud netflix-oss组件大规模的进入到了维护期,不再提供新功能,spring cloud alibaba受到开源社区的大力拥护。

1、服务注册

       在本案例中,使用2个服务注册到Nacos上,分别为nacos-providernacos-consumer

构建服务提供者nacos-provider

       新建一个Spring Boot项目nacos-providerSpring boot版本为2.1.4.RELEASESpring Cloud 版本为Greenwich.RELEASE,在pom文件引入nacosSpring Cloud起步依赖

       工程目录如下:

       pom.xml关键代码如下:

        <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.4.RELEASE</version>
	</parent>
    <dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Greenwich.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
			<version>0.9.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

       application.yml内容如下:

server:
  port: 8762
spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848


       在上述的配置的中,程序的启动端口为8762,应用名为nacos-provider,向nacos server注册的地址为127.0.0.1:8848

在启动类NacosProviderApplication@EnableDiscoveryClient注解,代码如下:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication  
{
    public static void main( String[] args )
    {
        SpringApplication.run(NacosProviderApplication.class, args);
    }
}

构建服务消费者nacos-consuer

       和nacos-provider一样,构建服务消费者nacos-consumernacos-cosumer的启动端口8763。构建过程同nacos-provider,这里仅示范出application.yml内容:

server:
  port: 8763
spring:
  application:
    name: nacos-customer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848


验证服务注册个发现

       分别启动2个工程,待工程启动成功之后,在访问localhost:8848,可以发现nacos-providernacos-consumer,均已经向nacos-server注册,如下图所示:

服务调用

       nacos作为服务注册和发现组件时,在进行服务消费,可以选择RestTemplateFeign等方式。这和使用EurekaConsul作为服务注册和发现的组件是一样的,没有什么区别。这是因为spring-cloud-starter-alibaba-nacos-discovery依赖实现了Spring Cloud服务注册和发现的相关接口,可以和其他服务注册发现组件无缝切换。

提供服务

       在nacos-provider工程,写一个Controller提供API服务,代码如下:

@RestController
public class ProviderController {

	Logger logger= LoggerFactory.getLogger(ProviderController.class);

	@GetMapping("/hi") 
	public String hi(@RequestParam(value = "name",defaultValue= "forezp",required = false) String name){
		return "hi "+name; 
	}
}

消费服务

       在这里使用2种方式消费服务,一种是RestTemplate,一种是Feign

1、使用RestTemplate调用服务

       RestTemplate可以使用Ribbon作为负载均衡组件,在nacos-consumer工程中引入ribbon的依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-ribbon</artifactId>
	<version>1.4.7.RELEASE</version>
</dependency>

       在NacosConsumerApplication启动文件注入RestTemplateBean,代码如下,加上@LoadBalanced注解即可在RestTemplate上开启LoadBalanced负载均衡的功能。

@LoadBalanced
@Bean
public RestTemplate restTemplate(){
	return new RestTemplate();
}

       写一个消费服务的ConsumerController,代码如下:

@RestController
public class ConsumerController {

	@Autowired
	RestTemplate restTemplate;

	@GetMapping("/hi-resttemplate")
	public String hiResttemplate(){
		return restTemplate.getForObject("http://nacos-provider/hi?name=resttemplate",String.class);
	}
}

       重启工程,在浏览器上访问http://localhost:8763/hi-resttemplate,可以在浏览器上展示正确的响应,这时nacos-consumer调用nacos-provider服务成功。

2、使用FeignClient消费服务

       在nacos-consumerpom文件引入以下的依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

       在NacosConsumerApplication启动文件上加上@EnableFeignClients注解开启FeignClient的功能。

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosCustomerApplication 
{
    public static void main( String[] args )
    {
    	SpringApplication.run(NacosCustomerApplication.class,args);
    }
}

       在nacos-customer工程里面写一个FeignClient接口,调用nacos-provider的服务,代码如下:

@FeignClient("nacos-provider")
public interface  ProviderClient {
	@GetMapping("/hi")
	String hi(@RequestParam(value = "name", defaultValue = "forezp", required = false) String name);
}

       然后编写一个消费API,该API使用ProviderClient来调用nacos-providerAPI服务,代码如下:

@RestController
public class ConsumerController {

	@Autowired
	ProviderClient providerClient;

	@GetMapping("/hi-feign")
	public String hiFeign(){
		return providerClient.hi("feign");
	}
}

       重启工程,在浏览器上访问http://localhost:8763/hi-feign,可以在浏览器上展示正确的响应,这时nacos-consumer调用nacos-provider服务成功。

总结

       本文比较详细的介绍了如何使用Nacos作为服务注册中心,并使用案例介绍了如何在使用nacos作为服务注册中心时消费服务。下一篇教程将介绍如何使用nacos作为分布式配置中心

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐的小三菊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值