使用注解的方式进行配置RabbitMQ

引入依赖:

java 复制代码
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>

配置application.yml

XML 复制代码
server:
  port: 8082
spring:
  rabbitmq:
    host: 192.168.37.105
    port: 5672
    username: admin
    password: admin
    virtual-host: /

shop:
  exchange: shop.exchange.direct
  queue: shop.queue
  routingKey: shop.routingKey

编写配置类消息转化器:

java 复制代码
@Configuration
public class RabbitmqConfig {

    /**
     * 消息转化器
     * 将对象转化为 Json 字符串
     */
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

创建生产者:

java 复制代码
@RestController
@RequiredArgsConstructor
@RequestMapping("producer03")
public class Producer03Controller {

    private final RabbitTemplate rabbitTemplate;

    @GetMapping("/send01")
    public String sendMsgFanout(){
        rabbitTemplate.convertAndSend("exchange2.fanout","",new Student(2,"Alice","178",20));
        return "Producer02==>发送成功!";
    }

    @GetMapping("/send02")
    public String sendFanout(){
        rabbitTemplate.convertAndSend("exchange2.fanout","","Fanout发送消息!");
        return "Producer02==>发送成功!";
    }

    @GetMapping("/send03")
    public String sendMsgDirect(){
        rabbitTemplate.convertAndSend("exchange2.DIRECT","monian",new Student(2,"Alice","178",20));
        return "Producer02==>发送成功!";
    }

    @GetMapping("/send04")
    public String sendMsgDirectMsg(){
        rabbitTemplate.convertAndSend("exchange2.DIRECT","monian","发送的数据Direct!");
        return "Producer02==>发送成功!";
    }
}

创建消费者:

java 复制代码
@Component
public class MsgListener02 {
    /**
     * 使用注解的方式,对交换机和队列进行装配
     * 如果存在就不创建
     *
     * @param msg
     */
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "queue02"),
            exchange = @Exchange(value = "exchange2.fanout", type = ExchangeTypes.FANOUT)
    ))
    public void readMsg(Student stu) {
        System.out.println("annotationListener::Fanout => :" + stu);
    }

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "queue02"),
            exchange = @Exchange(value = "exchange2.fanout", type = ExchangeTypes.FANOUT)
    ))
    public void readMsg(String msg) {
        System.out.println("annotationListener::Fanout => :" + msg);
    }

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "queue03"),
            exchange = @Exchange(value = "exchange2.DIRECT", type = ExchangeTypes.DIRECT),
            key = "monian"
    ))
    public void readMsgDirect(Student stu) {
        System.out.println("annotationListener::Direct => :" + stu);
    }

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "queue03"),
            exchange = @Exchange(value = "exchange2.DIRECT", type = ExchangeTypes.DIRECT),
            key = "monian"
    ))
    public void readMsgDirect(String msg) {
        System.out.println("annotationListener::Direct => :" + msg);
    }

}

编写Student:

java 复制代码
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Student implements Serializable {
    private Integer id;
    private String name;
    private String phone;
    private Integer age;
}

测试结果:

相关推荐
qq_124987075311 小时前
基于Hadoop的信贷风险评估的数据可视化分析与预测系统的设计与实现(源码+论文+部署+安装)
大数据·人工智能·hadoop·分布式·信息可视化·毕业设计·计算机毕业设计
洛豳枭薰13 小时前
消息队列关键问题描述
kafka·rabbitmq·rocketmq
Coder_Boy_13 小时前
基于Spring AI的分布式在线考试系统-事件处理架构实现方案
人工智能·spring boot·分布式·spring
袁煦丞 cpolar内网穿透实验室14 小时前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
人间打气筒(Ada)15 小时前
GlusterFS实现KVM高可用及热迁移
分布式·虚拟化·kvm·高可用·glusterfs·热迁移
xu_yule15 小时前
Redis存储(15)Redis的应用_分布式锁_Lua脚本/Redlock算法
数据库·redis·分布式
難釋懷19 小时前
分布式锁的原子性问题
分布式
ai_xiaogui20 小时前
【开源前瞻】从“咸鱼”到“超级个体”:谈谈 Panelai 分布式子服务器管理系统的设计架构与 UI 演进
服务器·分布式·架构·分布式架构·panelai·开源面板·ai工具开发
凯子坚持 c20 小时前
如何基于 CANN 原生能力,构建一个支持 QoS 感知的 LLM 推理调度器
分布式