Spring Cloud RabbitMQ 的傻瓜式教程(fanout)

环境:

Spring Cloud 2020.0.3

Windows 10

RabbitMQ server 3.7.14https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/rabbitmq-server-3.7.14.exeErlang 21.3http://erlang.org/download/otp_win64_21.3.exe

最近在写一个订单系统

基本流程:用户发起订单请求----订单服务把消息推送到交换机----用户服务余额与商品服务库存进行消费----生成订单,使用分布式事务和Rabbit ACK机制确保订单下单成功

下面仅讨论基本使用,手动创建队列,你也通过配置在运行时进行创建

首先进入localhost:15672 默认账户密码都是 guest

创建项目使用的账户,如果你要使用默认的guest账户,可以跳过这步

设置用户权限

 创建虚拟地址

 创建交换机

创建队列 

 把所有队列都绑定交换机

项目配置

依赖和yml每个服务都是一样的,记住我们上面配的各种名字

        <!--        rabbitMq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: bugo
    password: 123
    virtual-host: /order

生产者

/**
 * 消息发送者 - Producer。
 * @Component Producer类型的对象,必须交由Spring容器管理。
 * 使用SpringBoot提供的AMQP启动器,来访问rabbitmq的时候,都是通过AmqpTemplate来实现的。
 * 如果全局配置文件中,配置了rabbitmq相关内容,且工程依赖了starter-amqp,则spring容器自动创建AmqpTemplate对象。
 */
@Component
public class BugoOrdersSender {

    @Autowired
    private AmqpTemplate rabbitAmqpTemplate;

    //exchange 交换器名称
//    @Value("${mq.config.exchange}")
    private String exchange = "order.fanout";

    //routingkey 路由键
//    @Value("${mq.config.queue.info.routing.key}")
    private String routingKey = "order.fanout";
    /*
     * 发送消息的方法
     */
    public void send(RocketOrdersDto msg){
        /**
         * convertAndSend - 转换并发送消息的template方法。
         * 是将传入的普通java对象,转换为rabbitmq中需要的message类型对象,并发送消息到rabbitmq中。
         * 参数一:交换器名称。 类型是String
         * 参数二:路由键。 类型是String
         * 参数三:消息,是要发送的消息内容对象。类型是Object
         */
        this.rabbitAmqpTemplate.convertAndSend(this.exchange, this.routingKey, msg);
    }
}

每个需要消费的服务都需要配置接收者

@Component
@RabbitListener(
        queues = "order.wallet"
)
public class BugoOrdersReceiver {

    /**
     * 消费消息的方法。采用消息队列监听机制
     * @RabbitHandler - 代表当前方法是监听队列状态的方法,就是队列状态发生变化后,执行的消费消息的方法。
     * 方法参数。就是处理的消息的数据载体类型。
     */
    @RabbitHandler
    public void process(RocketOrdersDto msg){
        System.out.println("receiver: "+msg);
    }
}

在接口中调用生产,接受者就可以接收了

 

 

 有疑问欢迎评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值