点击查看【bilibili】

① 安装 RabbitMQ

  • docker 安装 rabbitmq
  1. docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

访问 rabbitmq 管理台

  1. http://ip:15672
  • 默认用户名密码
    | 用户名 | 密码 | | —- | —- | | guest | guest |

② 代码整合

  • 目标服务增加 amqp 依赖
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-amqp</artifactId>
  4. </dependency>
  • nacos 对应的服务配置文件增加链接相关信息
  1. spring:
  2. rabbitmq:
  3. host: 172.16.1.199
  4. port: 5672
  5. username: guest
  6. password: guest
  • 配置服务启动创建队列 hello
  1. @Configuration(proxyBeanMethods = false)
  2. public class RabbitQueueConfiguration {
  3. /**
  4. * 启动时创建队列
  5. * @return
  6. */
  7. @Bean
  8. public Queue queue() {
  9. return new Queue("hello");
  10. }
  11. }
  • 配置服务监听 hello 队列
  1. @Component
  2. public class RabbitQueueListener {
  3. /**
  4. * 监听 hello 队列的处理器
  5. * @param message
  6. */
  7. @RabbitListener(queues = "hello")
  8. @RabbitHandler
  9. public void onMessage(Message message) {
  10. log.info("消费端Payload: " + message.getPayload().toString());
  11. }
  12. }
  • 代码中向指定队列发送消息
  1. @Autowired
  2. private AmqpTemplate amqpTemplate;
  3. amqpTemplate.convertAndSend("队列名称","信息");

③ 特殊说明

  • 在 MQ 消费监听逻辑中调用 Feign

A 服务并没有 token 去请求 B 服务,pig 也对这种情况进行了兼容。类似于 A 对外暴露 API,但是又安全限制。参考日志插入情况

FeignClient 需要带一个请求 token,FROM_IN 声明是内部调用

  1. remoteLogService.saveLog(sysLog, SecurityConstants.FROM_IN);

目标接口对内外调用进行限制 @Inner 注解,这样就避免接口对外暴露的安全问题。只能通过内部调用才能使用,浏览器不能直接访问该接口

  1. @Inner
  2. @PostMapping
  3. public R save(@Valid @RequestBody SysLog sysLog) {
  4. return new R<>(sysLogService.save(sysLog));
  5. }

❤ 问题咨询

手势点击蓝字求关注简约风动态引导关注__2022-09-07+23_18_38.gif