RabbitMQ的使用踩坑

1.使用RabbitMQ监控用户支付结果,项目采用微服务架构,一个项目专门支付,一个项目专门监控并修改mysql数据库
2.RabbitMQ的使用
.a)在CentOS7中通过docker拉取RabbgitMQ镜像并创建容器,具体:https://blog.csdn.net/brantykl/article/details/123012122?spm=1001.2014.3001.5502
.b)新建支付微服务,并添加相关依赖(暂不添加支付,通过postman模拟支付的回调保存数据到RabbitMQ的队列中)

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-amqp</artifactId>
  <version>2.1.4.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <version>2.1.4.RELEASE</version>
</dependency>

.c)支付微服务添加配置文件yml(注意:RabbitMQ配置位置要正确)

server:
  port: 18090
spring:
  application:
    name: order
  rabbitmq:
    username: brant
    password: brant
    virtual-host: my_vhost
    host: 192.168.211.132
    port: 5672
mq:
  pay:
    exchange:
      order: exchange.order
    queue:
      order: queue.order
    routing:
      key: queue.order

.d)配置启动类.将交换机,队列,路由key交给spring容器(订阅模式)

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableEurekaClient
/*@Import(RabbitMQInfo.class)*/
@EnableAutoInject
public class WeixinPayApplication {
    public static void main(String[] args) {
        SpringApplication.run(WeixinPayApplication.class,args);
    }

    @Autowired
    private RabbitMQInfo rabbitMQInfo;

    @Bean
    public IdWorker idWorker(){
        return new IdWorker(0,1);
    }

    //创建队列
    @Bean
    public Queue queueOrder(){
        return new Queue(rabbitMQInfo.getQueue());
    }

    //创建交互机 路由模式的交换机
    @Bean
    public DirectExchange createExchange(){
        return new DirectExchange(rabbitMQInfo.getExchange());
    }

    //创建绑定 指定routingkey
    @Bean
    public Binding createBinding(){
        return BindingBuilder.bind(queueOrder()).to(createExchange()).with(rabbitMQInfo.getRouting());
    }

}

. 1)在开始的时候,我没有配置,而是在web界面上进行了配置,后来发现在程序启动时也是可以创建的
. 2)读取yml参数是通过自定义注解实现第三方Bean的注入

/**
 * 实现加载第三方Bean
 *
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import({RabbitMQInfo.class})
public @interface EnableAutoInject {
}

.e)监控微服务配置与上述一致,除了以上配置,还需注意在web界面需要新建一个用户并给予权限:https://www.cnblogs.com/xdr630/p/15254603.html
.f)在所有配置完成后通过postman模拟携带支付数据发送post请求到支付微服务
.g)支付微服务接收到请求执行以下程序

@RequestMapping(value = "/notify/url")
public String notifyUrl(HttpServletRequest request,
                       HttpServletResponse response,
                       @RequestParam String pay){
       
//发送消息给MQ 订单号 交易流水 支付结果
//参数1 指定交换机的名称
//参数2 指定routingkey
//参数3 指定消息本身   
  rabbitTemplate.convertAndSend(rabbitMQInfo.getExchange(),
  								rabbitMQInfo.getRouting(),
   								JSON.toJSONString(pay));
return null;
}

3.总结
 1)注意yml文件里的配置的位置
 2)RabbitMQ用户的权限问题
 3)交换机,队列,路由key交给spring容器
 4)RabbitMQ在新建容器时默认用户是guest,guest.此时默认只可以通过localhost访问
 5)加载第三方Bean需要使用yml的参数是要写全称
 6)在使用SpringBoot整合junit时,需要加上以下注解,并导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
@SpringBootTest
@RunWith(SpringRunner.class)
RabbitMQ是一个使用Erlang实现的高并发高可靠AMQP消息队列服务器。它支持消息的持久化、事务、拥塞控制、负载均衡等特性,使得RabbitMQ在各种应用场景下被广泛使用RabbitMQ与Erlang和AMQP密切相关。 Erlang是一种编程语言,它特别适合构建高并发、分布式、实时的系统。RabbitMQ使用Erlang作为其底层开发语言,这使得它能够充分利用Erlang在并发处理和容错性方面的优势。 AMQP(Advanced Message Queuing Protocol)是一个开放标准的消息队列协议,用于在应用程序之间进行可靠的消息传递。RabbitMQ实现了AMQP协议,这意味着它可以与其他遵循AMQP协议的应用程序进行通信,实现可靠的消息传递机制。 要使用RabbitMQ,可以通过Docker安装,使用以下命令运行一个带有管理界面的RabbitMQ容器: ``` docker run -itd --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management ``` 在编写RabbitMQ程序时,可以利用其支持的多种消息模型,例如发布-订阅模型、工作队列模型、路由模型等,根据具体需求选择合适的模型来实现消息传递。 在配置RabbitMQ环境时,可以设置RABBITMQ_SERVER环境变量,并将RabbitMQ的安装路径添加到系统的path变量中,以方便在命令行中直接使用RabbitMQ命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [RabbitMQ使用详解](https://blog.csdn.net/qq_43410878/article/details/123656765)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值