★★所用版本:
(在父工程 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);
}