(1) 环境搭建
- 新建一个Maven工程
- 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
- 书写启动类
@SpringBootApplication
public class RabbitmqApplication {
public static void main(String[] args) {
SpringApplication.run(RabbitmqApplication.class, args);
}
}
- 书写配置文件
application.yml
server:
port: 8888
spring:
rabbitmq:
host: localhost
port: 5672
username: admin
password: admin
virtual-host: /study-rabbitmq
(2)几种模式代码演示
-
fanout模式
1.Queue:表示创建队列名
2.FanoutExchange:表示创建交换机,参数1:交换机名,参数2:是否持久化,参数3:是否自动删除
3.Bingding:将队列与交换机绑定
4.fanout:没有路由键
routingkey
配置类代码:
@Configuration
public class RabbitmqFanoutConfig {
public final static String EXCHANGE_FANOUT = "exchange_fanout";
@Bean
public FanoutExchange fanoutExchange(){
return new FanoutExchange(EXCHANGE_FANOUT,true,false);
}
@Bean
public Queue queueOne(){
return new Queue("fanout-one");
}
@Bean
public Queue queueTwo(){
return new Queue("fanout-two");
}
@Bean
public Binding bindingOne(){
return BindingBuilder.bind(queueOne()).to(fanoutExchange());
}
@Bean
public Binding bindingTwo(){
return BindingBuilder.bind(queueTwo()).to(fanoutExchange());
}
}
发送端代码:
通过rabbitTemplate来进行消息的发送
public void sendFanout(String msg) {
rabbitTemplate.convertAndSend(RabbitmqFanoutConfig.EXCHANGE_FANOUT,null,msg);
}
接收端代码:
通过RabbitListener来监听队列,获取队列中消息
@RabbitListener(queues = "fanout-one")
public void fanoutReceiver1(String msg){
System.out.println("fanout-one:"+msg);
}
-
direct模式
1.基础设置与fanout模式类型
2.设置路由key通过:BindingBuilder.bind(queue()).to(directExchange()).with(“路由键”)设置
配置类代码:
@Configuration
public class RabbitDirectConfig {
public final static String DIRECT_EXCHANEGE_NAME = "test-direct";
@Bean
public Queue queue() {
return new Queue("direct-queue");
}
@Bean
public DirectExchange directExchange() {
return new DirectExchange(DIRECT_EXCHANEGE_NAME, true, false);
}
@Bean
public Binding binding() {
return BindingBuilder.bind(queue()).to(directExchange()).with("direct");
}
}
发送端、接收端代码与上边类似就不做演示
- topic模式
配置类代码:
@Component
public class RabbitmqTopConfig {
public final static String EXCHANGE_TOP="top_excange";
@Bean
public TopicExchange topicExchange(){
return new TopicExchange(EXCHANGE_TOP);
}
@Bean
public Queue test1(){
return new Queue("test1");
}
@Bean
public Queue test2(){
return new Queue("test2");
}
@Bean
public Binding test1Binding(){
return BindingBuilder.bind(xiaomi()).to(topicExchange()).with("test1.#");
}
@Bean
public Binding test2Binding(){
return BindingBuilder.bind(huawei()).to(topicExchange()).with("test2.#");
}
}
发送端代码:
public void sendhuawei(String msg) {
rabbitTemplate.convertAndSend(RabbitmqTopConfig.EXCHANGE_TOP,"test1.news",msg);
}
public void sendxiaomi(String msg) {
rabbitTemplate.convertAndSend(RabbitmqTopConfig.EXCHANGE_TOP,"test2.news",msg);
}
接收端代码与上述相同,不做赘述