SpringBoot整合RabbitMQ -fanout模式

Posted MyAzhe0ci3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot整合RabbitMQ -fanout模式相关的知识,希望对你有一定的参考价值。

SpringBoot整合RabbitMQ -fanout模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于是使用真实的阿里云服务器所以需要配置一下rabbitMQ的服务配置yml
注:一定要在阿里云的安全组中开放5672端口

# 服务端口
server:
  port: 8080
# 配置rabbitmq服务
spring:
  rabbitmq:
    username: admin
    password: admin
    virtual-host: /
    host: 139.196.122.115
    port: 5672

在这里插入图片描述

模拟用户下单

package com.newer.rabbitmq.springbootorderrabbitmqproducer.service;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.UUID;

@Service
public class OrderService {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * @deprecated :模拟用户下单
     * @param :[userid,productid,num]
     * @return: void
     */
    public void makeOrder(String userid,String productId,Integer num){
           //1.根据商品id查询库存是否充足
           //2.保存订单
           String orderId= UUID.randomUUID().toString();
        System.out.println("订单生成成功:"+orderId);
           //3.通过MQ来完成消息的分发
           //参数1:交换机 参数2:路由key/queue队列名称 参数3:消息内容
           String exchangeName="fanout_order_exchange";
           //由于是fanout模式所以不需要路由key
           String routingkey="";
           rabbitTemplate.convertAndSend(exchangeName,routingkey,orderId);
    }


}

配置类

package com.newer.rabbitmq.springbootorderrabbitmqproducer.config;

import com.rabbitmq.client.AMQP;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMqConfiguration {

    //1.声明注册fanout模式的交换机
    @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange("fanout_order_exchange",true,false);
    }
    //2.声明队列sms.fanout.queue email.fanout.queue,duanxin.fanout.queue
    @Bean
    public Queue smsQueue(){
        return new Queue("sms.fanout.queue");
    }
    @Bean
    public Queue emailQueue(){
        return new Queue("email.fanout.queue");
    }
    @Bean
    public Queue duanxinQueue(){
        return new Queue("duanxin.fanout.queue");
    }
    //3.完成绑定关系(完成交换机与队列之间的绑定关系)
    @Bean
    public Binding smsBinding(){
        return BindingBuilder.bind(smsQueue()).to(fanoutExchange());
    }
    @Bean
    public Binding emailBinding(){
        return BindingBuilder.bind(emailQueue()).to(fanoutExchange());
    }
    @Bean
    public Binding duanxinBinding(){
        return BindingBuilder.bind(duanxinQueue()).to(fanoutExchange());
    }

}

测试

package com.newer.rabbitmq.springbootorderrabbitmqproducer;

import com.newer.rabbitmq.springbootorderrabbitmqproducer.service.OrderService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootOrderRabbitmqProducerApplicationTests {

	@Autowired
	private OrderService orderService;
	@Test
	void contextLoads() {
		orderService.makeOrder("1","1",12);
	}

}

在这里插入图片描述
在这里插入图片描述
然后我们看一下他们之间的绑定关系绑定上没
在这里插入图片描述
小结:通过springboot整合Rabbitmq是非常便捷的

以上是关于SpringBoot整合RabbitMQ -fanout模式的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ整合SpringBoot

RabbitMQ——springboot整合RabbitMQ

SpringBoot整合多个RabbitMQ

Spring和SpringBoot整合RabbitMQ

Spring和SpringBoot整合RabbitMQ

springboot rabbitmq整合