nacos实现服务注册与两种消费方式

  • 运行nacos
  • 服务注册实例
  • 两种服务消费方式
    • RestTemplet
    • Feign
    • 测试
  • 参考

运行nacos

预备环境:64位操作系统、64位JDK1.8+、Maven 3.2.x+
启动服务器

  • Linux:sh startup.sh -m standalone
  • Windows:cmd startup.cmd

测试
登录网址:http://localhost:8848/nacos/index.html
账号密码均为:nacos

服务注册实例

架构图:

  1. provider应用将自己的信息注册到nacos中
  2. consumer应用从nacos中获取到provider应用的信息
  3. consumer直接调用provider对外提供的接口

项目结构:

项目中主要包含三个文件:

  • pom.xml
  • NacosProviderApplication.java
  • application.properties

pom.xml

<?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"><parent><artifactId>nacos-spring-cloud-discovery-example</artifactId><groupId>com.alibaba.nacos</groupId><version>0.2.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>nacos-spring-cloud-provider-example</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>
</project>

NacosProviderApplication.java

package com.alibaba.nacos.example.spring.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {public static void main(String[] args) {SpringApplication.run(NacosProviderApplication.class, args);}@RestControllerclass EchoController {@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)public String echo(@PathVariable String string) {return "Hello Nacos Discovery " + string;}}
}

application.properties

// 监听接口为18080接口
server.port=18080
// 服务名为“service-provider”
spring.application.name=service-provider
// 注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

测试方式一:
若项目启动后,控制台出现以下输出,则表示注册成功

2019-05-21 10:27:03.571  INFO 7888 --- [           main] o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, service-provider 192.168.43.248:18080 register finished

测试方式二:
登录nacos查询已注册的服务

两种服务消费方式

RestTemplet

使用RestTemplet能够方便的使用REST资源
以下为RestTemplet消费服务的代码:
pom.xml

<?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"><parent><artifactId>nacos-spring-cloud-discovery-example</artifactId><groupId>com.alibaba.nacos</groupId><version>0.2.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>nacos-spring-cloud-consumer-example</artifactId><properties><spring-cloud-openfeign.version>2.0.0.RELEASE</spring-cloud-openfeign.version><spring-cloud-netflix.version>2.0.0.RELEASE</spring-cloud-netflix.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId><version>${spring-cloud-netflix.version}</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>${spring-cloud-openfeign.version}</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>
</project>

NacosConsumerApplication.java

package com.alibaba.nacos.example.spring.cloud;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {@LoadBalanced@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(NacosConsumerApplication.class, args);}@RestControllerpublic class TestController {private final RestTemplate restTemplate;@Autowiredpublic TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)public String echo(@PathVariable String str) {return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);}}
}

application.properties

// 服务名
spring.application.name=service-consumer
// 注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

Feign

  相较restTrmplet,Feign使用@FeignClient注解来指定接口,接口中定义的函数可以通过Spring MVC的注解来绑定服务提供方的REST接口。需要消费服务时,只需要直接调用对应方法即可。
以下为Feign消费服务的代码:
pom.xml

<?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"><parent><artifactId>nacos-spring-cloud-discovery-example</artifactId><groupId>com.alibaba.nacos</groupId><version>0.2.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>nacos-spring-cloud-consumer-example</artifactId><properties><spring-cloud-openfeign.version>2.0.0.RELEASE</spring-cloud-openfeign.version><spring-cloud-netflix.version>2.0.0.RELEASE</spring-cloud-netflix.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId><version>${spring-cloud-netflix.version}</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>${spring-cloud-openfeign.version}</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies>
</project>

NacosConsumerApplication.java

package com.alibaba.nacos.example.spring.cloud;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConsumerApplication {public static void main(String[] args) {SpringApplication.run(NacosConsumerApplication.class, args);}@RestControllerpublic class TestController {@AutowiredClient client;@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)public String echo(@PathVariable String str) {return client.hello(str);}}@FeignClient("service-provider")interface Client{@GetMapping(value="/echo/{str}")String hello(@PathVariable("str") String str);}
}

application.properties

// 服务名
spring.application.name=service-consumer
// 注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

测试

测试地址:http://localhost:8080/echo/daa
预期返回结果:Hello Nacos Discovery daa(消费成功)

参考

nacos官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
nacos压缩包下载地址:https://github.com/alibaba/nacos/releases

服务注册实例源码:https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example/nacos-spring-cloud-provider-example

nacos实现服务注册与两种消费方式相关推荐

  1. 简单谈谈ActiveMQ的两种消费方式

    ActiveMQ 有两种消费方式,一种是q,一种是订阅式的.用q的方式提供生产的话始终保存在服务端,直到一个消费者把他消费完才可以返回一个状态.然后就是订阅的方式可以供多个消费者同时消费.我们当时用的 ...

  2. 将mysql服务注册到consul_【NoSQL】Consul中服务注册的两种方式

    一句话 用agent更优雅,适合agent遍布每个应用机的情况.用catalog更直接,操作更方便 前言 今天遇到写一个服务启动自注册的逻辑时产生了一点纠结,可以使用agent对象的register方 ...

  3. Hystrix服务降级的两种处理方式@HystrixCommand注解和定义统一fallback接口

    项目地址: 链接:https://pan.baidu.com/s/1Mxo0ltvZbpz_r8mCU-mSpw  提取码:3j4a 问题答疑: Hystrix服务保护框架,在微服务中Hystrix能 ...

  4. RocketMQ:两种消费方式:pull拉、push推

    RocketMQ:两种消息消费方式:pull拉.push推 1.推送方式pull模式: 拉取,DefaultMQPullConsumer模式. 是由客户端主动向MQ请求数据,主动权在客户端,先拉取数据 ...

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

    自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭 ...

  6. 使用Nacos实现服务注册与发现(spring cloud 组件教程大全四)

    使用Nacos实现服务注册与发现(spring cloud 组件教程大全四) idea 创建maven父子工程(spring cloud 组件教程大全 一) windows下nacos的安装及Mysq ...

  7. Nacos中服务注册中心AP、CP模式实现,AP、CP模式切换

    本文分析Nacos基于Nacos 2.0 Nacos中服务注册中心默认是AP模式,如果设置为CP模式 那么客户端设置 spring.cloud.nacos.discovery.ephemeral=fa ...

  8. Spring Cloud Alibaba教程:使用Nacos作为服务注册中心

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 什么是Nacos? Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易 ...

  9. java手动注册filter,SpringBoot注册Filter的两种实现方式

    springboot版本:2.2.5 一.filter注册 springboot中添加filter有两种方式: 1.实现方法一 2.实现方法二 二.Springboot自带filter Springb ...

最新文章

  1. (转载)Unity中解析ini配置文件----INIParser
  2. 让就医流程更智能 道一循推医院官方APP
  3. HBase最佳实践-读性能优化策略
  4. java代码耗尽内存_有关Java内存溢出及内存消耗的小知识
  5. 高性能python_[转]【原创】High Performance Python(Python 高性能计算)(一)
  6. php 数组 闭包,PHP如何用array_filter加闭包函数过滤数组?
  7. Spring IOC基础概念总结:何为控制?何为反转?控制了什么?反转了哪里?
  8. python中图例legend标签内容_Python学习第87课-数据可视化之图形标识title、label、legend...
  9. 107 nginx rewrite规则和alias
  10. squid服务的应用 转
  11. ws2812b灯带容易坏_树莓派控制WS2812B灯带 - Python
  12. python分词与去停用词简单实操
  13. JAVA 连接SAP Jco3
  14. 用于webmax演示的网页文件
  15. chm sharp安卓版_CHM 阅读器
  16. 今天拿到软件设计师证书
  17. ValueError: attempt to get argmax of an empty sequence
  18. java 系统资源不足_[InteliJ IDEA] 系统资源不足
  19. 云托管,边缘物理计算托管物理计算,你所需要了解的……
  20. LeetCode500. 键盘行

热门文章

  1. 管理计算机域的内置账户怎么取消,取消普通域用户将计算机加入域的权限
  2. 医学数字成像设备中计算机系统的作用包括,《医学影像设备学》题 集
  3. 关于GitHub Education(GitHub教育认证)认证
  4. curl调用新版jenkins crumb报错 No valid crumb was included in the request 解决方法
  5. 从asm磁盘头自动备份看11g到12c的新特性--Physical_metadata_replication
  6. 产品经理交互设计师必备的已分类的《产品Axure原型库》
  7. 通过耳机口左右声道输出得到4路控制信号
  8. 关于微信小程序·小程序云开发字段搜索
  9. 16 通道 65MSPS 14 bit 直流耦合 AD 采集卡/ FMC 子卡
  10. 提高程序可读性的技巧