要解决的问题:假设我有两个服务,分别是服务service-edu(服务调用者)和服务service-vod(服务提供者),想在服务service-edu中调用服务service-vod的方法。
将服务在注册中心中注册
1.下载nacos并成功启动,进入登录页面进行登录。
注意用户名和密码都是nacos
2.点击服务管理下的服务列表,可以发现是空的
image.png3.在这两个服务的父工程中引入服务注册依赖
项目结构图.png <!--服务注册-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
4.分别给服务service-edu和服务service-vod的配置文件application.properties
中添加nacos服务地址
#nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
5.分别给服务service-edu和服务service-vod的启动类上添加注解,注册nacos
@EnableDiscoveryClient
启动服务service-edu和服务service-vod,刷新服务列表,会显示当前注册的所有服务,以及每个服务的集群数目、实例数、健康实例数。点击详情,我们还能看到每个服务具体的实例信息,如下图所示:
服务列表.png
服务调用者
Feign是SpringCloud中服务消费端的调用框架。
在SpringCloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。
1.在这两个服务的父工程中引入服务调用依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.创建一个接口,使用@FeignClient
注解,调用服务提供者的方法
@FeignClient("service-vod")//service-vod就是在service-vod服务的配置文件中定义的服务名
@Component
public interface VodClient {
/**
* 定义要调用的方法路径
* 根据视频id删除阿里云中的视频
* @PathVariable("id")注解一定要指定参数名称,否则出错
* @param id
* @return
*/
@DeleteMapping("/eduvod/video/removeAlyVideo/{id}")
public R deleteVideoById(@PathVariable("id") String id);
}
3.在控制层调用service-vod服务的方法
注入刚刚创建的接口即可调用方法
//注入vodClient
@Autowired
private VodClient vodClient;
vodClient.deleteVideoById(videoId);
网友评论