springboot2.x整合rabbitMQ:简单的生产者和消费者

一、生产者

1、源码地址

码云Git

2、添加rabbitMQ依赖
<!--rabbitmq依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
3、连接rabbitmq配置
spring:
  rabbitmq:
    addresses: 127.0.0.1:5672
    username: guest
    password: guest
    virtual-host: /

分别是rabbitmq服务端地址、用户名、密码、虚拟主机路径

4、发送消息

可直接用RabbitTemplate来发送消息,代码如下

@Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendPerson(Person person) throws Exception{

        CorrelationData correlationData = new CorrelationData();
        correlationData.setId(person.getMessageId());
        rabbitTemplate.convertAndSend("person-exchange",
                "person.abcd",
                person,
                correlationData);
    }

一、消费者

1、源码地址

码云Git

2、依赖如上一样,配置如下:

##rabbitmq基本配置
spring:
  rabbitmq:
    addresses: 127.0.0.1:5672
    username: guest
    password: guest
    virtual-host: /
    ##消费端配置
    listener:
      simple:
        concurrency: 5
        max-concurrency: 10
        acknowledge-mode: auto

增加了消费端的基本配置

2、消费消息
@RabbitListener(
            bindings = @QueueBinding(
                    value = @Queue(value = "person-queue",durable = "true"),
                    exchange = @Exchange(name = "person-exchange",durable = "true",type = "topic"),
                    key = "person.*"
            )
    )
    @RabbitHandler
    public void onPersonMessage(@Payload Person person,
                                @Headers Map<String,Object> headers,
                                Channel channel) throws Exception{
        //消费者操作
        System.out.println("===收到消息,开始消费=====");
        System.out.println("personID:" + person.getId());
        Long deliverTag = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);
        channel.basicAck(deliverTag,false);
    }

@RabbitListener注解可以指定exchange、queue、routekey

3、测试

启动消费者项目rabbitmq-consumer,
生产者项目,通过JunitTest调用发送消息的方法

@Autowired
    private RabbitPersonSender rabbitPersonSender;

    @Test
    public void testSend1() throws Exception{
        Person person = new Person();
        person.setId("00001");
        person.setName("Tony");
        person.setMessageId(System.currentTimeMillis()+"$"+ UUID.randomUUID().toString());
        rabbitPersonSender.sendPerson(person);
    }

生产者发送消息成功,消费端成功消费消息,控制台打印如下:

成功消费消息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值