谷粒商城整合SpringCloudAalibaba相关组件(Nacos,Feign)
目录
- 一. 谷粒商城整合Nacos
- 1.1 导入Nacos依赖
- 1.2 下载Nacos-Server
- 1.3 配置文件中配置服务的发现
- 1.4 服务的注册
- 1.5 谷粒商城整合Nacos配置中心
- 二. 谷粒商城整合OpenFeign
- 2.1 导入OpenFeign依赖
- 2.2 编写一个接口,让SpringCloud知道此接口需要调用远程服务
- 2.3 开启远程调用的功能
- 2.4 测试远程调用的功能
一. 谷粒商城整合Nacos
1.1 导入Nacos依赖
<!--nacos服务与注册发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
1.2 下载Nacos-Server
服务注册连接的中间件,方便观察服务是否注册:下载解压至本地即可:
Nacos-Server
管理员启动startup.cmd
即可
1.3 配置文件中配置服务的发现
哪个服务需要被发现,就在哪个配置文件下配置:
# nacos服务的注册发现
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
1.4 服务的注册
在启动类上配置注解@EnableDiscoveryClient
开启服务的发现
之后启动服务访问localhost:8848
出现服务注册可视化界面,输入账号与密码都是nacos
出现服务名说明注册成功,如下图所示:
注意你用的SpringBoot的版本必须适应Nacos依赖否则会报错!!!
1.5 谷粒商城整合Nacos配置中心
引入依赖
<!--nacos做配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
修改配置文件bootstrap.properties
# 配置中心名称
spring.application.name=gulimall-coupon
# 配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
实时配置更新
修改配置文件后,实现实时配置更新,将文件配置到配置中心即可如下图所示:
修改之后配置文件就会优先使用配置中心中的文件了,不过我们需要在控制类中加上@RefreshScope
实时刷新的注解。
二. 谷粒商城整合OpenFeign
使用SpringCloudAalibaba提供的Feign来实现远程的调用,如果A模块要调用B模块则要在A中引入依赖:
2.1 导入OpenFeign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.2 编写一个接口,让SpringCloud知道此接口需要调用远程服务
比如有如下接口需要调用远程服务(即会员服务调用优惠券服务,就需要在会员服务中声明接口)
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/member/list")
public R memberCoupons();
}
@FeignClient("gulimall-coupon")
用来声明服务名知道要去调用哪个,然后将调用远程的接口签名写全即可;
2.3 开启远程调用的功能
使用注解@EnableFeignClients
标注在调用服务服务的启动类上并指定全包名即可
@MapperScan("com.atguigu.gulimall.member.dao")
@EnableFeignClients("com.atguigu.gulimall.member.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
2.4 测试远程调用的功能
在MemberController.java
中测试:
@RequestMapping("/coupons")
public R test(){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("ZS");
R memberCoupons = couponFeignService.memberCoupons();
return R.ok().put("member", memberEntity).put("coupons",memberCoupons.get("coupons"));
}
服务调用成功:
{
"code": 0,
"coupons": [
{
"id": null,
"couponType": null,
"couponImg": null,
"couponName": "滿100減去20",
"num": null,
"amount": null,
"perLimit": null,
"minPoint": null,
"startTime": null,
"endTime": null,
"useType": null,
"note": null,
"publishCount": null,
"useCount": null,
"receiveCount": null,
"enableStartTime": null,
"enableEndTime": null,
"code": null,
"memberLevel": null,
"publish": null
}
],
"member": {
"id": null,
"levelId": null,
"username": null,
"password": null,
"nickname": "ZS",
"mobile": null,
"email": null,
"header": null,
"gender": null,
"birth": null,
"city": null,
"job": null,
"sign": null,
"sourceType": null,
"integration": null,
"growth": null,
"status": null,
"createTime": null
}
}
还没有评论,来说两句吧...