(RabbitMQ 三)SpringBoot+RabbitMQ实现发送和接收队列(可接受基本数据类型和对象)

SpringBoot+RabbitMQ实现发送和接收队列(可接受基本数据类型和对象)

本文可以提供给RabbitMQ的初学者提供RabbitMq的简单使用,并提供JAVA代码。但本文不提供RabbitMQ的安装过程以及SpringBoot项目的创建过程。


RabbitMQ系列文章如下:

(RabbitMQ 一【转载】)windows10环境下的RabbitMQ安装步骤
https://blog.csdn.net/myQNUMNINE/article/details/120447514

(RabbitMQ 二)Springboot项目中使用RabbitMQ的相关依赖
https://blog.csdn.net/myQNUMNINE/article/details/120460073

(RabbitMQ 三)SpringBoot+RabbitMQ实现发送和接收队列(可接受基本数据类型和对象)
https://blog.csdn.net/myQNUMNINE/article/details/120053242

(RabbitMQ 四)SpringBoot+RabbitMQ实现用接收器接受多个主题【一条消息通过交换机发往多个消息队列】
https://blog.csdn.net/myQNUMNINE/article/details/120065706

(RabbitMQ 五)SpringBoot+RabbitMQ一个接收者监听多个消息队列
https://blog.csdn.net/myQNUMNINE/article/details/120096394

(RabbitMQ 六)SpringBoot+RabbitMQ实现广播模式
https://blog.csdn.net/myQNUMNINE/article/details/120095529

(RabbitMQ 七【完结】)SpringBoot+RabbitMQ实现消息队列延迟功能(使用RabbitMQ延迟插件实现)
https://blog.csdn.net/myQNUMNINE/article/details/120335005


一、配置application.properties

host填写的是ip地址,我填的是本地地址,也可以填127.0.0.1,或者局域网内的地址都可以。port是端口号,默认使用5672端口。username是安装rabbitMq后的默认用户,password也是默认密码。

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

二、配置队列

创建一个RabbitMQ的配置类,需使用注解@Configuration。编写一个方法,返回值类型为Queue,方法需使用注解@Bean,将队列交由IOC管理。(注意Queue所引入的包)

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitmqConfigDuilie {
    @Bean
    public Queue queueDuilie() {
        return new Queue("Queue1");
    }
}

三、创建接收者

创建一个接收者类,类上需使用的注解有:@Component,(RabbitMQ的监听注解)@RabbitLinstener。编写一个方法,
返回类型为void,传入参数类型类String类型,方法上需使用注解@RabbitHandler(来实现具体消费)。

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(queues = "Queue1")
public class ReceiverA {

	@RabbitHandler
    public void QueueReceiver(String Queue1) {
    	System.out.println("A消费了");
        System.out.println("Receiver A: " + Queue1);
    }

}

四、创建发送者

创建一个发送者类,类上使用注解@Component;在类中使用@Autowired注解自动注入MQ模板(AmqpTemplate);编写一个方法,返回值类型为void,传入参数类型为String类型;利用MQ模板的convertAndSend()方法发送消息。注意:AmqpTemplate引入的包不是RabbitMQ的,而是Spring自己的包;此外发送的队列名(Queue1)应与接收者类的监听队列名(Queue1)一致。

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class SenderA {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send(String context) {
        System.out.println("Sender : " + context);
        //使用AmqpTemplate将消息发送到消息队列Queue1中去
        this.rabbitTemplate.convertAndSend("Queue1", context);
    }
}

五、测试发送和接收情况

在SoringBoot项目的src/test/java目录下创建测试方法,注意:测试类上的注解需要有:@SpringBootTest @RunWith(SpringRunner.class)(不添加此注解,可能会出现错误);类的内部使用@AutoWired注解自动注入SenderA(发送者类);编写一个方法,返回类型为void,无传入参数,方法上使用注解@Test,方法的核心是,把需要发送的String类型消息,通过调用自动注入的SenderA类中的send()方法实现。
通过Junit启动运行测试方法,在控制台观察运行的过程和结果。

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.example.demo.duilie.SenderA;

import java.util.Date;

@SpringBootTest
@RunWith(SpringRunner.class)
public class DuilieTest {

    @Autowired
    private SenderA queueSender;

    @Test
    public void QueueSend() {
        int i = 10;
        for (int j = 0; j < i; j++) {
            String msg = "Queue1 msg" + j + new Date();
            try {
                queueSender.send(msg);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

总结

如果能够实现发送和接收(过程有打印在控制台)那么RabbitMQ的使用就有了一个良好的开始。

对于如何添加到Web应用中,可以这样做:在服务的实现层自动注入发送者类(Sender),然后再需要的方法中使用发送者类的send()方法,就能够把消息发送到响应的队列当中。之后可以在接收者类中(ReceiverA)做响应的处理,比如引入Mapper层(通过自动注入的方式)把消息写入数据库。

举个例子(该例子仅仅是展示一个使用的过程,不考虑合理性):前端向后端发送一个编辑用户信息的请求,传入参数为User对象,接收到数据后,用send把数据发送,保存到消息队列当中后即可执行return操作。之后原本在处理方法中的所有处理操作都转移到接收者类当中进行执行。

发送POJO对象跟发送String类型数据差不多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值