依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置文件application.yml
rabbitmq:
host: localhost
port: 5672
username: username
password: password
virtual-host: /
RabbitConfig
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
public static final String QUEUE_INFORM_EMAIL = "queue_inform_email";
public static final String QUEUE_INFORM_SMS = "queue_inform_sms";
public static final String EXCHANGE_TOPICS_INFORM = "exchange_topics_inform";
public static final String ROUTINGKEY_EMAIL = "inform.email.#";
public static final String ROUTINGKEY_SMS = "inform.sms.#";
// 声明交换机
@Bean
public Exchange EXCHANGE_TOPICS_INFORM() {
return ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build();
}
// 声明队列
@Bean
public Queue QUEUE_INFORM_EMAIL() {
return new Queue(QUEUE_INFORM_EMAIL);
}
@Bean
public Queue QUEUE_INFORM_SMS() {
return new Queue(QUEUE_INFORM_SMS);
}
// 绑定交换机和队列
@Bean
public Binding BINDING_ROUTINGKEY_EMAIL() {
return BindingBuilder.bind(QUEUE_INFORM_EMAIL()).to(EXCHANGE_TOPICS_INFORM()).with(ROUTINGKEY_EMAIL).noargs();
}
@Bean
public Binding BINDING_ROUTINGKEY_SMS() {
return BindingBuilder.bind(QUEUE_INFORM_SMS()).to(EXCHANGE_TOPICS_INFORM()).with(ROUTINGKEY_SMS).noargs();
}
}
消息生产者RabbitProducer
import com.example.demo.rabbit.config.RabbitConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class RabbitProducer {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendEmail() {
/**
* 参数:
* 1、交换机名称
* 2、路由键
* 3、消息
*/
rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_TOPICS_INFORM, "inform.email", "send email message");
}
public void sendSMS() {
/**
* 参数:
* 1、交换机名称
* 2、路由键
* 3、消息
*/
rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_TOPICS_INFORM, "inform.sms", "send sms message");
}
}
消息消费者RabbitCustomer
import com.example.demo.rabbit.config.RabbitConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class RabbitCustomer {
@RabbitListener(queues = {RabbitConfig.QUEUE_INFORM_SMS})
public void sendSms(String message){
System.out.println("customer sendSms message : "+ message);
}
@RabbitListener(queues = {RabbitConfig.QUEUE_INFORM_EMAIL})
public void sendEmail(String message){
System.out.println("customer sendEmail message : "+ message);
}
}
通过Controller进行调用
import com.example.demo.rabbit.producer.RabbitProducer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/rabbit")
public class RabbitController {
@Autowired
public RabbitProducer producer;
@RequestMapping("/test")
public void Test() {
producer.sendEmail();
}
}
启动项目后调用接口:
结果: