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








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM