Spring Cloud Alibaba使用Fegin实现远程调用,Nacos服务发现

一什么是Nacos?

四大功能

服务发现和服务健康监测(使服务更容易注册,并通过DNS或HTTP接口发现其他服务,还提供服务的实时健康检查,以防 止向不健康的主机或服务实例发送请求。 )
支持基于DNS和基于RPC的服务发现。服务提供者使用原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。
Nacos提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

动态配置服务
以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
提供了一个简洁易用的UI (控制台样例 Demo) 帮助管理所有的服务和应用的配置。
Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,能更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

动态 DNS 服务
动态 DNS 服务支持权重路由,更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能更容易地实现以 DNS 协议为基础的服务发现,消除耦合到厂商私有服务发现 API 上的风险。
Nacos 提供了一些简单的 DNS APIs TODO ,管理服务的关联域名和可用的 IP:PORT 列表

服务及其元数据管理
从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

服务发现

在微服务架构中一个业务流程需要多个微服务通过网络接口调用完成业务处理,服务消费方从服务注册中心获取服务提供方的地址,从而进行远程调用,这个过程叫做服务发现。

二、配置Nacos

我这里使用的是docker下载的nacos,
第一步:下载镜像

docker pull nacos/nacos-server:1.3.1

第二步:创建挂载文件目录

mkdir -p /mydata/nacos/init.d
mkdir -p /mydata/nacos/logs
cd /mydata/nacos/init.d
touch custom.properties

第三步:添加配置
在custom.properties文件中填写如下配置:

management.endpoints.web.exposure.include=*

第四步:创建并启动容器

docker run -d -p 8848:8848 -e MODE=standalone
-v /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
-v /mydata/nacos/logs:/home/nacos/logs
–restart always
–name my-nacos nacos/nacos-server:1.3.1

第五步:访问Nacos控制台测试是否安装成功
在这里插入图片描述

http://ip地址:8848/nacos
登录账号(默认):nacos
登录密码(默认):nacos

tips:公网访问时,请确保防火墙已开启端口8848。

第六步:新建命名作为教学用
在这里插入图片描述
在这里插入图片描述

三、构建项目

第一步:创建一个maven项目作为父工程
在这里插入图片描述

第二步:在父工程pom添加相关依赖

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.2.1.RELEASE</version>
    </parent>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencyManagement>

 		 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependencies>
            <!--1. 添加springcloud的依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--2. 添加springcloud的依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            
        <!-- 注册中心需要引入的依赖  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- 配置中心需要引入的依赖  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

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

        </dependencies>

    </dependencyManagement>

第三步:在创建两个模块,一个是用户微服务,一个是订单微服务
因为这里作为教学,随便调用一下就行,你们随便创建两个模块也行
在这里插入图片描述
配置用户模块和订单模块的配置文件
注意,这里修改端口号和微服务的名字就可以了

比如说:

我的用户微服务是8000 订单是8001

我的用户微服务名是user 订单微服务名是order

server:
port: 8000
spring:
#配置数据源
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://120.25.228.68:3306/lbl-manager?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: root
#微服务名字
application:
name: user
#配置nacos
cloud:
nacos:
discovery:
server-addr: 120.25.228.68:8848
namespace: b1795cce-9f54-45e4-b090-dc743a6e77a7
config:
server-addr: 120.25.228.68:8848
file-extension=properties: properties

用户的yml文件
在这里插入图片描述
订单的yml配置
在这里插入图片描述
用户微服务项目架构
在这里插入图片描述
订单微服务项目架构
在这里插入图片描述

然后是SpringBoot的启动类,用户和订单时一样的
在这里插入图片描述
到这里大概的配置就好了

第四步:启动用户微服务和订单微服务
可以看到nacos有用户微服务和订单微服务的服务,证明配置成功了,这两个微服务也可以互相调用了
在这里插入图片描述

四、微服务之间调用

第一步:添加远程调用依赖

使用Fegin实现远程调用,添加依赖,在父工程的时候我们已经添加了
就是这个:

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

第二步:进行调用微服务远程调用
这里教学所以以最简单的案例教学, 在用户微服务控制层编写一个最简单的HelloWorld
在这里插入图片描述
你们这里这样编写就行,如下:

@Controller
@RequestMapping("/user")
public class UserController {

    @GetMapping("/hello")
    @ResponseBody
    public String hello(){
        return "hello";
    }
    
}

启动用户微服务访问一下这个hello,这里没有问题的
在这里插入图片描述
第三步:订单微服务调用用户微服务走的hello方法
在这里插入图片描述

@FeignClient("user")
public interface UserMicroservice {

    @GetMapping("/user/hello")
    String hello();

@FeignClient(“user”) 走的user就是用户微服务的名字
意思就是你的用户微服务注册到了nacos服务,nacos有了用户微服务的ip地址和端口号
user可以代表为:localhost:8000
那么有了用户微服务的ip地址和端口,我们怎么就不能调用它的方法能,对吧
在这里插入图片描述
然后是方法@GetMapping("/user/hello")
/user/hello这里就是调用user下的hello对吧
在这里插入图片描述
第四步:到这里我们在订单微服务写控制层调用我们编写的UserMicroservice接口,看看能否调用成功
在这里插入图片描述

@Controller
@RequestMapping("/order")
public class UserController {

    @Autowired
    private UserMicroservice userMicroservice;

    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return userMicroservice.hello();
    }

第五步:启动用户微服务和订单微服务测试
1:先访问用户微服务本身的hello方法
在这里插入图片描述
2:在访问订单微服务的hello方法
这里可以看出,调用成功了
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
Spring Cloud Alibaba是一个基于Spring Cloud的开源框架,提供了丰富的微服务开发工具包,包括服务注册与发现、配置管理、消息总线、负载均衡、熔断降级、分布式事务、流量控制、安全控制、分布式追踪等功能。 Spring Cloud AlibabaNacos、Dubbo、Sentinel等组件协同工作,Nacos作为注册中心和配置中心,Dubbo作为RPC框架,Sentinel作为流量控制和熔断降级组件,共同构建起完整的微服务生态体系。 使用Spring Cloud Alibaba进行服务注册和发现,可以通过注解@EnableDiscoveryClient开启服务注册与发现功能,并通过@FeignClient或@LoadBalanced注解实现服务调用和负载均衡。 使用Spring Cloud Alibaba进行服务治理,可以通过注解@EnableCircuitBreaker开启熔断降级功能,并通过@SentinelResource注解配置熔断降级规则。 使用Spring Cloud Alibaba进行熔断降级,可以通过Sentinel Dashboard进行实时监控和管理,同时通过注解@SentinelRestTemplate实现对RestTemplate的熔断降级。 使用Spring Cloud Alibaba进行服务配置管理,可以通过注解@EnableConfigNacosConfig和@Value注解实现动态配置管理。 使用Spring Cloud Alibaba进行分布式事务管理,可以通过注解@EnableDistributedTransaction开启分布式事务管理功能,并通过@GlobalTransactional注解实现分布式事务的统一管理和控制。 使用Spring Cloud Alibaba进行链路追踪,可以通过注解@EnableZipkinServer和@EnableZipkinClient开启链路追踪功能,并通过Sleuth和Zipkin实现微服务调用链的追踪和分析。 使用Spring Cloud Alibaba进行服务限流,可以通过Sentinel进行实时流控和熔断降级,同时通过注解@SentinelResource实现服务的限流控制。 Spring Cloud Alibaba支持微服务服务网关管理,可以通过注解@EnableZuulProxy或@EnableGateway开启服务网关功能,并通过Zuul或Gateway实现微服务的API网关管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喝汽水的猫^

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

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

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

打赏作者

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

抵扣说明:

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

余额充值