前言
本文使用的是 SpringCloud Alibab集成Nacos实现:服务注册、服务发现、服务调用
1、关于什么是SpringCloud和微服务大家可以参考这篇文章:SpringCloud和微服务之间的关系
2、关于Nacos大家可以参考这篇文章:什么是Nacos和Nacos的下载和安装
1、服务注册 & 服务发现
1、导入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、在配置文件中配置nacos,同时配置项目项目(如果不配置项目名称在nacos服务列表也是看不到的)
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon
3、在启动类添加注解:@EnableDiscoveryClient,开启服务注册与发现功能
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
3、启动nacos,再启动服务,会发现服务列表中已经存在了。
2、服务远程调用
1、首先保证调用者和被调用者都在注册中心,如下 2、引入依赖
<!-- nacos远程调用依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3、准备被调用的接口,例如 A服务要调用B服务中的方法,那么就在B服务中创建好方法 4、在调用者(A服务)创建一个feign包,以后所有远程调用的接口都放在这个包下面,创建一个接口,然后将要调用的远程接口直接复制头部过来,注意路劲要改为全路径
@RequestMapping("/coupon/coupon/member/list")
public R memberCoupon();
5、开启远程调用功能,去到启动类(A服务的启动类),加上注解:@EnableFeignClients 6、在A服务中的任意控制器写一个测试请求
@RequestMapping("/test")
public R test(){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("楚元");
R r = couponFeignService.memberCoupon();
return R.ok().put("member",memberEntity).put("coupons",r.get("coupons"));
}
7、打开浏览器测试:http://localhost:8000/服务名称/控制器路径/test 远程调用成功,至此,我们使用SprignCloud Alibaba集成Nacos实现服务注册、服务发现、服务调用演示完毕。
总结
关于远程调用的前提是需要先启动Ncos,并且一定要注意调用者服务和被调用者服务都成功注册到了注册中心,确保两个服务之间能够发现对方。
|