SpringBoot集成RabbitMQ

今天给大家介绍一下我们项目中是如何集成RabbitMQ,因为用到MQ的地方不是很多,所以只是简单的用到exchange中的direct类型,至于其它的3个类型:topic,fanout,header我就不做过多的介绍了,在以后的章节里面再给大家具体的介绍。关于RabbitMQ的集成其实很简单,比起昨天的Quartz来说算是很简单的了,好了现在就开始我们今天的内容了。

pom添加依赖

首先我们先引入RabbitMQ的相关依赖



org.springframework.boot
spring-boot-starter-amqp

配置RabbitMQ

依赖引入之后,我们就可以配置RabbitMQ的链接了,这边我们用的是RabbitTemplate。具体的代码如下所示:

/**
*
* RabbitMQ的配置文件
* @author qiang220316
* @date 2018/8/9
*/
@Configuration
public class RabbitMqConfig {

@Value("${spring.rabbitmq.host}")
private String addresses;

@Value("${spring.rabbitmq.port}")
private String port;

@Value("${spring.rabbitmq.username}")
private String username;

@Value("${spring.rabbitmq.password}")
private String password;

@Bean
public ConnectionFactory connectionFactory() {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
    connectionFactory.setAddresses(addresses+":"+port);
    connectionFactory.setUsername(username);
    connectionFactory.setPassword(password);
    connectionFactory.setConnectionTimeout(60000);
    connectionFactory.setPublisherConfirms(true);
    return connectionFactory;
}
/**
 * rabbitAdmin代理类
 * @return
 */
@Bean
public RabbitAdmin rabbitAdmin(){
    return new RabbitAdmin(connectionFactory());
}

@Bean
public MessageConverter jsonMessageConverter() {
    return new Jackson2JsonMessageConverter();
}

/**
 * 因为要设置回调类,所以应是prototype类型,如果是singleton类型,则回调类为最后一次设置
 */
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
@Bean("rabbitTemplate")
public RabbitTemplate rabbitTemplate() {
    RabbitTemplate template = new RabbitTemplate(connectionFactory());
    template.setMessageConverter(jsonMessageConverter());
    return template;
}

@Bean
public Queue goodsQueue() {
    Queue goodsQueue = new Queue("test-queue",true,false,false);
    return goodsQueue;
}

@Bean
DirectExchange  mqDirectExchange() {
    return new DirectExchange("mq-exchange",true,false);
}

@Bean
Binding bindingExchangSmsQueue(Queue smsQueue, DirectExchange  mqDirectExchange) {
    Binding binding = BindingBuilder.bind(smsQueue).to(mqDirectExchange).with("test-queue");
    return  binding;
}

}

生产者

配置类搞定之后,我们接下来就需要编写MQ的发送消息类和消息接收处理类,因为这边我为了简单,所以这个项目既是消息的发送者,又是消息的消费者,我们首先看一下消息的发送者是如何实现的。

/**
* 消息发送者
*
* @Author qiang220316
* @Description 消息发送者
*/

@Service
public class TestQueueSend {

private static final Logger LOGGER = LoggerFactory.getLogger(TestQueueSend.class);

@Autowired
private AmqpTemplate rabbitTemplate;

/**
 * @param queueName 路由key(这里设置了路由key与队列名称一样了)
 * @param object 发送对象
 * @throws Exception
 */
public void sendQueue(String queueName, Object object) throws Exception {
    rabbitTemplate.convertAndSend("mq-exchange",queueName, object);
    LOGGER.info("队列" + queueName + ",【消息提供者】发送成功!");
}

}

消费者

消息发送者最核心的其实就是通过rabbitTemplate调用消息发送就可以了,代码上面来说是非常简单的。发送者说完了,我们再来看一下消息消费者是怎么实现的呢,具体代码如下所示:

/**
* 消息队列监听器
* @author qiang220316
*/
@Component
public class TestQueueListener {
private static final Logger logger = LoggerFactory.getLogger(TestQueueListener.class);

@RabbitHandler
@RabbitListener(queues = "test-queue")
public void process(Message message) {
    logger.info("MQ消息接收成功");
}

}
需要注意的是我们需要在处理消息的方法上面添加关于RabbitMQ的监听消息的注释,也就是我们在代码上面看到的@RabbitHandler和@RabbitListener(queues = “test-queue”),其中queues = “test-queue”是我们配置的消息队列名称。

消息测试

发送者和接收者都介绍完了,现在我们可以做最后的工作了,也就是测试了。这边我们先写一个测试控制类,然后通过它来发送消息,看看是否消息会被处理,控制类代码如下所示:

/**
* 接口测试控制类
* @author qiang220316
* @date 2018/8/9
*/
@RestController
public class RabbitMqController {

@Autowired
private TestQueueSend testQueueSend;

@RequestMapping("rabbit")
public String sendMQ(){
    try {
        testQueueSend.sendQueue("test-queue","我是消息");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "控制类开始发送消息";
}

}

测试结果

控制类搞定了,最后我们通过浏览器测试就可以了。我们先在浏览器中输入发送MQ的地址,如下所示:

在控制台中我们可以明显的看到,消息已经成功被消费者给消费了,这就说明我们集成是成功的。

进入RabbitMQ的后台,我们也可以很明显的看到消息已经添加进去了。

集成MQ过程还是很简单,比较坑的一点是本地测试因为Queue和测试环境的Queue名称一模一样,所以导致消息会被测试环境的消费者给消费掉,然后本地就没有打印消费日志,其实是被测试环境的MQ消费掉了。然后还有一点比较坑的是,因为测试环境的exchange是direct类型,然后本地用的是topic类型,因为类型不一致所以导致消息一直没有被消费掉,这点大家也要注意。最重要的一点,这些测试的前提是RabbitMQ服务器已经搭建完毕,否则所以的测试都是行不通的。

github地址:https://github.com/1913045515/SpringBoot/tree/master/SpringBoot/SpringBootRabbitMQ

推荐阅读

【SpringBoot系列】手把手教你集成Quartz定时任务

【SpringBoot系列】手把手教你集成Log4j2日志

【SpringBoot系列】手把手教你集成MongoDB集群

【SpringBoot系列】手把手教你集成Redis集群

【SpringBoot系列】手把手教你集成Dubbo

【SpringBoot系列】手把手教你集成ElasticSearch

SpringBoot集成RabbitMQ可以通过以下步骤实现。首先,在配置文件中添加RabbitMQ的连接信息。例如,在application.yml文件中配置RabbitMQ的主机、端口、用户名和密码等信息。\[1\]然后,引入SpringBoot整合RabbitMQ的依赖,包括spring-boot-starter-amqp和spring-rabbit-test等依赖项。\[2\]接下来,可以编写代码来实现与RabbitMQ的交互,例如发送和接收消息等操作。通过使用RabbitTemplate和@RabbitListener等注解,可以方便地实现消息的发送和接收。最后,可以通过运行SpringBoot应用程序来测试RabbitMQ集成是否成功。 #### 引用[.reference_title] - *1* [SpringBoot 集成RabbitMQ](https://blog.csdn.net/July_whj/article/details/120634833)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Springboot整合RabbitMQ](https://blog.csdn.net/weixin_49076273/article/details/124991012)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SpringBoot教程(十五) | SpringBoot集成RabbitMq](https://blog.csdn.net/lsqingfeng/article/details/123652520)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值