07 springboot整合rabbitmq
本节将阐述在springboot中整合rabbitmq。
1、前提约束
- 已经安装rabbitmq
https://www.jianshu.com/p/1efa0b1a7aa3
2、操作步骤
- 创建一个springboot项目,作者创建的项目路径是net.wanho.rabbitmq.springbootrabbitmq
https://www.jianshu.com/p/de979f53ad80 - 加入rabbitmq依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐amqp</artifactId>
</dependency>
- 修改application.properties
server.port=8088
spring.application.name=boot-rabbitmq
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5762
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
- 在主启动类同级目录下创建config包,在该包下创建配置类RabbitConfig.java
package net.wanho.rabbitmq.springbootrabbitmq.config;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitmqConfig {
final String email = "queue_email";
final String sms = "queue_sms";
final String exchange_topics = "exchange_topics";
@Bean(exchange_topics)
public Exchange exchange_topics() {
return ExchangeBuilder.topicExchange(exchange_topics).durable(true).build();
}
@Bean(sms)
public Queue sms() {
Queue queue = new Queue(sms);
return queue;
}
@Bean(email)
public Queue email() {
Queue queue = new Queue(email);
return queue;
}
@Bean
public Binding bindingSms(@Qualifier(sms) Queue queue, @Qualifier(exchange_topics) Exchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("inform.#.sms.#").noargs();
}
@Bean
public Binding bindingEmail(@Qualifier(email) Queue queue, @Qualifier(exchange_topics) Exchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("inform.#.email.#").noargs();
}
}
- 在主启动类同级目录下创建controller包,在该包下创建配置类ProducerController.java
package net.wanho.rabbitmq.springbootrabbitmq.controller;
import net.wanho.rabbitmq.springbootrabbitmq.config.RabbitmqConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class ProducerController {
@Resource
RabbitTemplate rabbitTemplate;
@GetMapping("/rabbitmq/producer/sms")
public String sendSms() {
String message = "sms to user";
rabbitTemplate.convertAndSend(RabbitmqConfig.exchange_topics, "inform.sms.email", message);
System.out.println("Send Message is:'" + message + "'");
return "send success";
}
@GetMapping("/rabbitmq/producer/email")
public String sendEmail() {
String message = "email to user";
rabbitTemplate.convertAndSend(RabbitmqConfig.exchange_topics, "inform.sms.email", message);
System.out.println("Send Message is:'" + message + "'");
return "send success";
}
}
- 在主启动类同级目录下创建listener包,在该包下创建配置类ReceiveListener.java
package net.wanho.rabbitmq.springbootrabbitmq.listener;
import com.rabbitmq.client.Channel;
import net.wanho.rabbitmq.springbootrabbitmq.config.RabbitmqConfig;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class ReceiveListener {
@RabbitListener(queues = {RabbitmqConfig.email})
public void receive_email(String msg, Message message, Channel channel) {
System.out.println(msg);
}
@RabbitListener(queues = {RabbitmqConfig.sms})
public void receive_sms(String msg, Message message, Channel channel) {
System.out.println(msg);
}
}
- 测试
启动主启动类,在浏览器中输入以下url:
http://localhost:8088/rabbitmq/producer/email
http://localhost:8088/rabbitmq/producer/sms
我们便能看到rabbitmq的topics模式的结果。