22springboot整合rabbitmq

1 四种交换机

1direct
在这里插入图片描述
2topic
在这里插入图片描述
3 fanout
在这里插入图片描述
4header

1.1direct 方式

1.1.1 生产者

1.1.1.1 引入依赖

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

1.1.1.2 yml.xml添加配置

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

1.1.1.3 配置类

@Configuration
public class EmailConfig {
    
    

    @Bean
    DirectExchange EmailExchange()
    {
    
    
        return new DirectExchange("EmailExchange");
    }
}

1.1.1.4controller

@RestController
@RequestMapping("amqp")
public class AmqpController {
    
    

    @Autowired
    RabbitTemplate template;

    @GetMapping("/direct")
    public String sendEmail(@RequestParam Map<String, Object> params)
    {
    
    
        String msg = params.get("msg").toString();
        template.convertAndSend("EmailExchange", "EmailRouting", msg);
        return "OK";
    }
}

1.1.2消费者

1.1.2.1 添加依赖

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

1.1.2.2 yml.xml添加配置

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

1.1.2.3 配置类

队列绑定到交换机上

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

@Configuration
public class EmailConfig {
    
    

    @Bean
    DirectExchange EmailExchange()
    {
    
    
        return new DirectExchange("EmailExchange");
    }

    @Bean
    Queue EmailQueue()
    {
    
    
        return new Queue("EmailQueue");
    }

    @Bean
    Binding BindEmail()
    {
    
    
        return BindingBuilder.bind(EmailQueue()).to(EmailExchange()).with("EmailRouting");
    }

}

1.1.2.4 监听类

@Component
public class EmailReceiver {
    
    

    @RabbitListener(queues = "EmailQueue")
    public void receiver(String msg)
    {
    
    
        System.out.println("收到的消息是:" + msg);
    }
}

1.1.3使用

先启动消费端,在启动生产者,
调用生产者的controller接口,
看消费者的控制台
在这里插入图片描述
在这里插入图片描述

1.2topic

1.2.1 生产者

1.2.1.1config

@Configuration
public class BlogConfig {
    
    

    @Bean
    TopicExchange BlogExchange()
    {
    
    
        return  new TopicExchange("BlogExchange");
    }

}

1.2.1.2 controller

   @GetMapping("/topic")
    public String sendBlog(@RequestParam Map<String, Object> params)
    {
    
    
        String msg = params.get("msg").toString();
        String routingKey = params.get("key").toString();
        template.convertAndSend("BlogExchange", routingKey, msg);
        return "OK";
    }

1.2.2 消费者

1.2.2.1config

package fastwave.cloud.demo.fastwavebizsubscriber.config;


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

@Configuration
public class BlogConfig {
    
    

    @Bean
    TopicExchange BlogExchange()
    {
    
    
        return  new TopicExchange("BlogExchange");
    }

    @Bean
    Queue BlogJavaQueue()
    {
    
    
        return new Queue("BlogJavaQueue", true);
    }

    @Bean
    Queue BlogDotNetQueue()
    {
    
    
        return new Queue("BlogDotNetQueue", true);//持久化,防止消息的丢失
    }

    @Bean
    Queue BlogAllQueue()
    {
    
    
        return new Queue("BlogAllQueue", true);
    }

    @Bean
    Binding BindingToJavaQueue()
    {
    
    
        return BindingBuilder.bind(BlogJavaQueue()).to(BlogExchange()).with("blog.java");
    }

    @Bean
    Binding BindingToDotNetQueue()
    {
    
    
        return BindingBuilder.bind(BlogDotNetQueue()).to(BlogExchange()).with("blog.dotNet");
    }

    @Bean
    Binding BindingToAllQueue()
    {
    
    
        return BindingBuilder.bind(BlogAllQueue()).to(BlogExchange()).with("blog.#");
    }
}

1.2.2.2监听者

@Component
public class BlogReceiver {
    
    

    @RabbitListener(queues = "BlogJavaQueue")
    public void receiverJava(String msg)
    {
    
    
        System.out.println("收到的JAVA消息是:" + msg);
    }

    @RabbitListener(queues = "BlogDotNetQueue")
    public void receiverDotNet(String msg)
    {
    
    
        System.out.println("收到的DotNet消息是:" + msg);
    }

    @RabbitListener(queues = "BlogAllQueue")
    public void receiverAll(String msg)
    {
    
    
        System.out.println("收到的ALL消息是:" + msg);
    }
}

1.2.3使用

在这里插入图片描述

1.3fanout方式

忽略routekey,发送给所有的消费者

1.3.1生产者

1.3.1.1config

@Configuration
public class FanoutConfig {
    
    

    @Bean
    FanoutExchange FanoutExchange()
    {
    
    
        return new FanoutExchange("FanoutExchange");
    }
}

1.3.1.2controller

 @GetMapping("/fanout")
    public String sendFanout(@RequestParam Map<String, Object> params)
    {
    
    
        String msg = params.get("msg").toString();
        template.convertAndSend("FanoutExchange", null, msg);
        return "OK";
    }

1.3.2消费者

1.3.2.1 config

@Configuration
public class FanoutConfig {
    
    

    @Bean
    FanoutExchange FanoutExchange()
    {
    
    
        return new FanoutExchange("FanoutExchange");
    }


    @Bean
    Queue FanoutQueue()
    {
    
    
        return new Queue("FanoutQueue");
    }

    @Bean
    Queue FanoutQueue2()
    {
    
    
        return new Queue("FanoutQueue2");
    }

    @Bean
    Binding BindFanout()
    {
    
    
        return BindingBuilder.bind(FanoutQueue()).to(FanoutExchange());
    }

    @Bean
    Binding BindFanout2()
    {
    
    
        return BindingBuilder.bind(FanoutQueue2()).to(FanoutExchange());
    }

}

1.3.2.2 监听者

@Component
public class FanoutReceiver {
    
    

    @RabbitListener(queues = "FanoutQueue")
    public void receiver(String msg)
    {
    
    
        System.out.println("收到的消息是:" + msg);
    }

    @RabbitListener(queues = "FanoutQueue2")
    public void receiver2(String msg)
    {
    
    
        System.out.println("收到的消息是:" + msg);
    }
}

1.3.3使用

在这里插入图片描述

1.4header方式

1.4.1 生产者

1.4.1.1 config

@Configuration
public class HeadersConfig {
    
    

    @Bean
    HeadersExchange headersExchange()
    {
    
    
        return new HeadersExchange("HeadersExchange");
    }
}

1.4.1.2 controller

  @GetMapping("/header")
    public String sendHeader(@RequestParam Map<String, Object> params) {
    
    
        String msg = params.get("msg").toString();
        MessageProperties messageProperties = new MessageProperties();
        if(params.get("token") != null)
        {
    
    
            messageProperties.setHeader("token", params.get("token").toString());
        }
        if(params.get("id") != null)
        {
    
    
            messageProperties.setHeader("id", params.get("id").toString());
        }
        Message message = new Message(msg.getBytes(), messageProperties);
        template.convertAndSend("HeadersExchange", null, message);
        return "OK";
    }

1.4.2 消费者

1.4.2.1 config

package fastwave.cloud.demo.fastwavebizsubscriber.config;

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

import java.util.HashMap;
import java.util.Map;

@Configuration
public class HeadersConfig {
    
    

    @Bean
    HeadersExchange headersExchange()
    {
    
    
        return new HeadersExchange("HeadersExchange");
    }


    @Bean
    Queue headerQueue1()
    {
    
    
        return new Queue("headerQueue1");
    }

    @Bean
    Queue headerQueue2()
    {
    
    
        return new Queue("headerQueue2");
    }

    @Bean
    Queue headerQueue3()
    {
    
    
        return new Queue("headerQueue3");
    }

    @Bean
    Queue headerQueue4()
    {
    
    
        return new Queue("headerQueue4");
    }

    @Bean
    Binding bindHeaderQueue1()
    {
    
    
        return BindingBuilder.bind(headerQueue1()).to(headersExchange())
                .whereAll("token", "id").exist();
    }

    @Bean
    Binding bindHeaderQueue2()
    {
    
    
        return BindingBuilder.bind(headerQueue2()).to(headersExchange())
                .whereAny("token", "id").exist();
    }

    @Bean
    Binding bindHeaderQueue3()
    {
    
    
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("token", "123");
        map.put("id", "123");
        return BindingBuilder.bind(headerQueue3()).to(headersExchange())
                .whereAll(map).match();
    }

    @Bean
    Binding bindHeaderQueue4()
    {
    
    
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("token", "123");
        map.put("id", "123");
        return BindingBuilder.bind(headerQueue4()).to(headersExchange())
                .whereAny(map).match();
    }
}

1.4.2.2监听者

@Component
public class HeaderReceiver {
    
    

    @RabbitListener(queues = "headerQueue1")
    public void receiver(String msg)
    {
    
    
        System.out.println("收到的消息是:" + msg);
    }

    @RabbitListener(queues = "headerQueue2")
    public void receiver2(String msg)
    {
    
    
        System.out.println("收到的消息是:" + msg);
    }

    @RabbitListener(queues = "headerQueue3")
    public void receiver3(String msg)
    {
    
    
        System.out.println("收到的消息是:" + msg);
    }

    @RabbitListener(queues = "headerQueue4")
    public void receiver4(String msg)
    {
    
    
        System.out.println("收到的消息是:" + msg);
    }
}

猜你喜欢

转载自blog.csdn.net/Insist___/article/details/109165970
今日推荐