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);
}







posted @ 2021-06-17 09:16  孤独的战斗笋  阅读(1589)  评论(0编辑  收藏  举报