spring cloud--微服务--Feign和RabbitMQ

饭宝  金牌会员 | 2024-8-12 06:06:07 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 576|帖子 576|积分 1728

作用:

简化微服务间通信:
体现在feign上就是:你(provider)提供服务接口,我(consumer)要使用;
体现在rabbitMQ上就是:我(provider)有命令给你(consumer),你(consumer)吸收并举行处理
区别:

feign:同步:需要及时相应
rabbitmq:异步:不需要及时处理
就像黑马虎哥说的:同步--打电话需要对方立即回应才气举行对话
                                异步--发微信随时能与对方举行对话。
有点tcp和udp那味儿了
feign使用:

1:consumer服务中引入依赖---------------------------------------------------------------------------

  1.   <!--openFeign-->
  2.   <dependency>
  3.       <groupId>org.springframework.cloud</groupId>
  4.       <artifactId>spring-cloud-starter-openfeign</artifactId>
  5.       <version>选择合适的版本</version>
  6.   </dependency>
  7.   <!--负载均衡器-->
  8.   <dependency>
  9.       <groupId>org.springframework.cloud</groupId>
  10.       <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  11.       <version>选择合适的版本</version>
  12.   </dependency>
复制代码
2:consumer服务启动类上添加注解@EnableFeignClients用来启用Feign客户端------

3:配置连接池提升性能(选做)-----------------------------------------------------------------------

  1. <!--OK http 的依赖 -->
  2. <dependency>
  3.   <groupId>io.github.openfeign</groupId>
  4.   <artifactId>feign-okhttp</artifactId>
  5.   <version>选择合适的版本</version>
  6. </dependency>
复制代码
  1. #yaml文件中配置
  2. feign:
  3.   okhttp:
  4.     enabled: true # 开启OKHttp功能
复制代码
4:编写feign接口:----------------------------------------------------------------------------------------

编写feign接口可以在consumer中编写,也可以新建一个服务模块专门来编写
这些接口是根据provider的controller层中的接口编写的
  1. @FeignClient(name = "service-provider")
  2. public interface ServiceClient {
  3.     @GetMapping("/items/{id}")
  4.     Item getItemById(@PathVariable("id") Long id);
  5.     @PostMapping("/items")
  6.     Item createItem(@RequestBody Item item);
  7.     @PutMapping("/items")
  8.     void updateItem(@RequestBody Item item);
  9.     @DeleteMapping("/items/{id}")
  10.     void deleteItemById(@PathVariable("id") Long id);
  11. }
复制代码
provider的controller中的方法示例:
  1. @RestController
  2. @RequestMapping("/items")
  3. public class ItemController {
  4.     @GetMapping("/{id}")
  5.     public ResponseEntity<Item> getItemById(@PathVariable Long id) {
  6.         // 业务逻辑
  7.     }
  8.     @PostMapping
  9.     public ResponseEntity<Item> createItem(@RequestBody Item item) {
  10.         // 业务逻辑
  11.     }
  12.     @PutMapping
  13.     public ResponseEntity<Void> updateItem(@RequestBody Item item) {
  14.         // 业务逻辑
  15.     }
  16.     @DeleteMapping("/{id}")
  17.     public ResponseEntity<Void> deleteItemById(@PathVariable Long id) {
  18.         // 业务逻辑
  19.     }
  20.     //其他接口
  21. }
复制代码
5:使用--------------------------------------------------------------------------------------------------------

  1. @Service
  2. public class ItemService {
  3.     //注入编写的feign客户端
  4.     @Autowired
  5.     private final ServiceClient serviceClient;
  6.     public Item getItem(Long id) {
  7.         return serviceClient.getItemById(id);
  8.     }
  9.     public Item createItem(Item item) {
  10.         return serviceClient.createItem(item);
  11.     }
  12.     public void updateItem(Item item) {
  13.         serviceClient.updateItem(item);
  14.     }
  15.     public void deleteItem(Long id) {
  16.         serviceClient.deleteItemById(id);
  17.     }
  18. }
复制代码
rabbitmq使用:SpringAmqp:rabbitmq的封装

1 安装:-------------------------------------------------------------------------------------------------------

windows: Installing RabbitMQ | RabbitMQ
docker:
  1. docker run \
  2. -e RABBITMQ_DEFAULT_USER=用户名 \    //请删除我,仅作提示:用户名想要啥写啥
  3. -e RABBITMQ_DEFAULT_PASS=密码 \      //请删除我,仅作提示:密码想要啥写啥
  4. -v mq-plugins:/plugins \
  5. --name mq \
  6. --hostname mq \
  7. -p 15672:15672 \              //请删除我,仅作提示:控制台端口
  8. -p 5672:5672 \                //请删除我,仅作提示:rabbitmq服务端口
  9. --network 网络名称\            //请删除我,仅作提示:自己配个网络
  10. -d \
  11. rabbitmq:3.8-management       //请删除我,仅作提示:版本有需要自己换
复制代码
2 依赖:-------------------------------------------------------------------------------------------------------

  1.     <dependency>
  2.         <groupId>org.springframework.boot</groupId>
  3.         <artifactId>spring-boot-starter-amqp</artifactId>
  4.         <version>选择自己需要的版本</version>
  5.     </dependency>
复制代码
3 yaml中配置:---------------------------------------------------------------------------------------------

  1. # application.yml
  2. spring:
  3.   rabbitmq:
  4.     host: rabbitmq的ip,是本地还是docker中的地址要搞清楚
  5.     port: 5672
  6.     username: 用户名
  7.     password: 密码
复制代码
4 consumer服务中举行监听-----------------------------------------------------------------------------

  1. @Component
  2. public class MessageListener {
  3.     @RabbitListener(bindings = @QueueBinding(
  4.         value = @Queue(value = "myQueue", durable = "true"), //队列的信息:队列名称,进行持久化
  5.         exchange = @Exchange(value = "myExchange", type = "topic"), //交换机:名称,类型
  6.         key = "my.routing.key" //路由键
  7.     ))
  8.     public void listen(String message) {
  9.         System.out.println("Received message: " + message);
  10.     }
  11. }
复制代码
5 provider服务中发送消息-------------------------------------------------------------------------------

  1. @Component
  2. @RequiredArgsConstructor
  3. public class MessageSender {
  4.     private final RabbitTemplate rabbitTemplate;
  5.     public void sendMessage(String message) {
  6.         rabbitTemplate.convertAndSend("myExchange", "my.routing.key", message);
  7.       
  8.     }
  9. }
复制代码
6 消息转换器(可选)--consumer,provider都要加配置---------------------------------------

是为了兼容,便利性,反正配置了有利益
  1. @Bean
  2. public MessageConverter jsonMessageConverter() {
  3.     return new Jackson2JsonMessageConverter();
  4. }
  5. @Bean
  6. public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
  7.     final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
  8.     rabbitTemplate.setMessageConverter(jsonMessageConverter());
  9.     return rabbitTemplate;
  10. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表