目录
代码架构
feign-api 模块解析
架构
依赖
定义接口类
lead-news-article模块
架构
yml配置
依赖
实现类
启动类
lead-news-wemedia模块
架构
调用
启动类
代码架构
feign-api 模块解析
架构
依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
定义接口类
@FeignClient(value = "leadnews-article")
public interface IArticleClient {@PostMapping("/api/v1/article/save")public ResponseResult saveArticle(@RequestBody ArticleDto dto) ;
}
注解分析:
@FeignClient
是Spring Cloud OpenFeign提供的注解,它的作用是创建一个Feign客户端。
value属性用于指定要调用的服务名称。这个名字需要在服务发现组件(如Eureka、Consul等)中注册过。
lead-news-article模块
架构
yml配置
server:port: 51802
spring:application:name: leadnews-articlecloud:nacos:discovery:server-addr: 192.168.74.128:8848config:server-addr: 192.168.74.128:8848file-extension: ymlextension-configs:- data-id: lead-redis.yamlgroup: DEFAULT_GROUPrefresh: true
分析:
spring:application:name: leadnews-article
feign模块依赖,根据name 去设置value的值。
依赖
使用feign的模块依赖
<dependency><groupId>com.heima</groupId><artifactId>heima-leadnews-feign-api</artifactId></dependency>
实现类
@RestController
public class ArticleClient implements IArticleClient {@Autowiredprivate ApArticleService apArticleService;@Override@PostMapping("/api/v1/article/save")public ResponseResult saveArticle(@RequestBody ArticleDto dto) {return apArticleService.saveArticle(dto);}
}
启动类
@SpringBootApplication
@EnableDiscoveryClient@MapperScan("com.heima.article.mapper")
@EnableFeignClients(basePackages = "com.heima.apis")
@EnableAsync
public class ArticleApplication {public static void main(String[] args) {SpringApplication.run(ArticleApplication.class, args);}@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}
注解分析:
@EnableFeignClients
是一个 Spring Cloud Feign 的注解,用于开启 Feign 客户端的功能。
basePackages 属性是指定扫描包含 Feign 客户端的包路径。例如你设置为 "com.heima.apis",那么 Spring 就会去 "com.heima.apis" 这个包及其子包下面寻找标注了 @FeignClient
注解的类,并将它们注册为 Feign 客户端。
这样你在代码中就可以通过 @Autowired
注入这些 Feign 客户端来进行远程调用了。
lead-news-wemedia模块
架构
保存文章功能需要用到远程调用
调用
启动类
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("com.heima.wemedia.mapper")
@EnableFeignClients(basePackages = "com.heima.apis")
@EnableScheduling
public class WemediaApplication {public static void main(String[] args) {SpringApplication.run(WemediaApplication.class,args);}@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}