zoukankan      html  css  js  c++  java
  • Nacos 服务中心和配置中心的配置远程Feign调用的配置流程

    ★★所用版本:

       (在父工程 mymall-commom 的 pom.xml中定义)

       需要cloud、boot、alibaba 包之间的版本配合。Nacos是1.2版本

    <dependencies>
      <java.version>1.8</java.version>                            <!--jdk  版本-->
      <spring-cloud.version>Greenwich.SR3</spring-cloud.version> <!--spring cloud 版本-->
      <artifactId>spring-boot-starter-parent</artifactId>         <!--spring boot2 版本 -->
      <version>2.1.8.RELEASE</version>
    </dependencies>

    <dependencyManagement>                     <!--这里负责spring cloud 和spring alibaba 的相关依赖的版本管理-->
        <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>2.1.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies>
    </dependencyManagement>


    一、服务中心:

     1.引入依赖:

       (放在父工程 mymall-commom 的 pom.xml中,所以只要依赖mymall-commom 即可)

      

    <!--        服务注册/发现       -->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <!--<version>${latest.version}</version>-->
    </dependency>

    2.在application.yml中配置:
    spring:
    cloud:
    nacos:
    discovery:
    server-addr: 127.0.0.1:8848 # 需要注册的服务中心地址
    application:
    name: mymall-coupon # 需要在nacos注册的应用名称

    3.在应用上增加注解,开启服务发现和注册功能
    @EnableDiscoveryClient
    public class MymallCouponApplication {

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

    }
    
    

    运行应用(首先要运行Nacos),运行时出现 nacos registry, mymall-coupon 192.168.56.1:7000 register finished 。则表明服务中心注册成功。

    二、Feign远程调用

    1.引入依赖

    <dependency>
    <groupId>org.springframework.cloud</groupId> <!--版本由Spring Cloud 管理-->
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    2.编写远程接口

      统一把远程接口编写在feign包下,便于管理;

      1) 接口命名要便于记忆和调用功能的出处,比如调用Coupon微服务的功能,接口类命名可以用CouponFeignService。 

      2) 接口类名上用注解@FeignClient("Nacos注册的服务名") ,表明要调用的时哪个微服务的功能;

      3) 把被调用方法的完整签名复制过来:

      @RequestMapping("/coupon/coupon/coupons")
    public R getCoupons();

          表明要调用的函数时coupon应用中的getCoupons方法。

          完整显示如下:

    @FeignClient("mymall-coupon")
    public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/coupons")
    public R getCoupons();
    }

    3.开启Feign功能

    @EnableFeignClients(basePackages="cn.henhao.mymall.member.feign")
    @MapperScan("cn.henhao.mymall.member.dao")
    @SpringBootApplication
    @EnableDiscoveryClient
    public class MymallMemberApplication {

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

    }

     4.在调用方的微服务的Contoller中写相关调用

    @Autowired

    private CouponFeignService couponFeignService;

    //testurl:http://localhost:8000/member/member/member/coupons
    @RequestMapping("/member/coupons")
    public R getMemberCoupons(){
    MemberEntity memberEntity = new MemberEntity();
    memberEntity.setNickname("会员昵称张三");
    R r = couponFeignService.getCoupons();//假设张三去数据库查了后返回了张三的优惠券信息

    //打印会员和优惠券信息
    return R.ok().put("member",memberEntity).put("coupons",r.get("coupons"));

    }
    测试:
    在浏览器中输入地址:
    http://localhost:8000/member/member/member/coupons

    就取到了相关的优惠券数据。


    三、配置中心:

    1. 引入依赖:(放在父工程 mymall-commom 的 pom.xml中,所以只要依赖mymall-commom 即可)

    <!--       配置中心         -->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

    2.新建bootstrap.properties文件(在resources下)
    放置配置中心的地址和本应用名
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    spring.application.name=mymall-coupon

    3.在配置中心添加一个数据集(Data Id),应用名.properties

    4.在应用名.properties 添加所需配置
    5.动态获取配置
    @RefreshScop (加在Controller名上)
    @Value (加在方法内方法变量上)

    例子:
    @Value("${coupon.user.name}")//从application.properties中获取//不要写user.name,他是环境里的变量
    private String name;
    @Value("${coupon.user.age}")
    private Integer age;

    @RequestMapping("/test")
    public R test(){

    return R.ok().put("name",name).put("age",age);
    }







  • 相关阅读:
    跨域常见解决方案
    express-session的简单使用说明
    Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
    继承父类的静态方法的加载顺序
    sql索引优化
    EXPLAIN 执行计划详解
    JVM总括二-垃圾回收:GC Roots、回收算法、回收器
    dubbo知识体系
    Spring bean的生命流程
    日志体系与异常处理
  • 原文地址:https://www.cnblogs.com/zhangxj/p/14892013.html
Copyright © 2011-2022 走看看