springboot+RabbitMq

1.創建一個springboot項目,導入如下maven座標

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

2application.properties 配置

spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

3topic通配符交換器使用

    3.1生產者 

package com.czxy.controller;

import com.czxy.config.TopicRabbitConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProducerController {

    @Autowired
    private RabbitTemplate rabbitTemplate;
    //topic-exange交換機  ROUTING_KEY1 = "topic.message";
    @GetMapping("/send1")
    public void send1() {
        String context = "hi, i am message 1";
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend(TopicRabbitConfig.EXCHANGE_NAME, TopicRabbitConfig.ROUTING_KEY1, context);
    }
    //topic-exange交換機  ROUTING_KEYx = "topic.#";
    @GetMapping("/send2")
    public void send2() {
        String context = "hi, i am messages 2";
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend(TopicRabbitConfig.EXCHANGE_NAME, TopicRabbitConfig.ROUTING_KEYx, context);
    }
   
}

   3.2 消費者

package com.czxy.controller;

import com.czxy.config.FanoutRabbitConfig;
import com.czxy.config.TopicRabbitConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;


@Component
public class Consumer {

    @RabbitListener(queues = TopicRabbitConfig.QUEUE_NAME1)
    public void consumeMessage(String message) {
        System.out.println(message+"topic1");
    }

    @RabbitListener(queues = TopicRabbitConfig.QUEUE_NAME2)
    public void consumeMessage1(String message) {
        System.out.println(message+"topic2");
    }
  
}

 3.3 配置類

package com.czxy.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.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TopicRabbitConfig {

    public final static String QUEUE_NAME1 = "topic.message";
    public final static String QUEUE_NAME2 = "topic.messages";

    public final static String EXCHANGE_NAME = "TopicExchange";

    public final static String ROUTING_KEY1 = "topic.message";
    public final static String ROUTING_KEY2 = "topic.messages";
    public final static String ROUTING_KEYx = "topic.#";
    public final static String ROUTING_KEYy = "topic.*";


    // 創建隊列
    @Bean
    public Queue queue1() {
        return new Queue(TopicRabbitConfig.QUEUE_NAME1);
    }
    @Bean
    public Queue queue2() {
        return new Queue(TopicRabbitConfig.QUEUE_NAME2);
    }

    // 創建一個 topic 類型的交換器
    @Bean
    public TopicExchange exchange() {
        return new TopicExchange(TopicRabbitConfig.EXCHANGE_NAME);
    }

    // 使用路由鍵(routingKey)把隊列(Queue)綁定到交換器(Exchange)
    @Bean
    public Binding binding1(Queue queue1, TopicExchange exchange) {
        return BindingBuilder.bind(queue1).to(exchange).with(TopicRabbitConfig.ROUTING_KEY1);
    }
    @Bean
    public Binding binding2(Queue queue2, TopicExchange exchange) {
        return BindingBuilder.bind(queue2).to(exchange).with(TopicRabbitConfig.ROUTING_KEYx);
    }


}

4fanout廣播模式交換器使用

 4.1生產者

package com.czxy.controller;

import com.czxy.config.TopicRabbitConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProducerController {

    @Autowired
    private RabbitTemplate rabbitTemplate;
   
   // fanout-exange交換機 不需要路由鍵
    @GetMapping("/send")
    public void send() {
        String context = "hi, fanout msg ";
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend("fanoutExchange", "", context);
    }
}

  4.2 消費者

package com.czxy.config;

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

@Configuration
public class FanoutRabbitConfig {

    public final static String FINDOUT1 = ("fanout.a");
    public final static String FINDOUT2 = ("fanout.b");
    public final static String FINDOUT3 = ("fanout.c");
    public final static String FindoutExange = ("fanoutExchange");

    //創建隊列
    @Bean
    public Queue AMessage() {
        return new Queue(FanoutRabbitConfig.FINDOUT1);
    }

    @Bean
    public Queue BMessage() {
        return new Queue(FanoutRabbitConfig.FINDOUT2);
    }

    @Bean
    public Queue CMessage() {
        return new Queue(FanoutRabbitConfig.FINDOUT3);
    }

    //創建交換機
    @Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange(FanoutRabbitConfig.FindoutExange);
    }

    //爲隊列模式綁定交換機
    @Bean
    Binding bindingExchangeA(Queue AMessage, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(AMessage).to(fanoutExchange);
    }

    @Bean
    Binding bindingExchangeB(Queue BMessage, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(BMessage).to(fanoutExchange);
    }

    @Bean
    Binding bindingExchangeC(Queue CMessage, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(CMessage).to(fanoutExchange);
    }

}

  4.3配置類

package com.czxy.config;

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

@Configuration
public class FanoutRabbitConfig {

    public final static String FINDOUT1 = ("fanout.a");
    public final static String FINDOUT2 = ("fanout.b");
    public final static String FINDOUT3 = ("fanout.c");
    public final static String FindoutExange = ("fanoutExchange");

    //創建隊列
    @Bean
    public Queue AMessage() {
        return new Queue(FanoutRabbitConfig.FINDOUT1);
    }

    @Bean
    public Queue BMessage() {
        return new Queue(FanoutRabbitConfig.FINDOUT2);
    }

    @Bean
    public Queue CMessage() {
        return new Queue(FanoutRabbitConfig.FINDOUT3);
    }

    //創建交換機
    @Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange(FanoutRabbitConfig.FindoutExange);
    }

    //爲隊列模式綁定交換機
    @Bean
    Binding bindingExchangeA(Queue AMessage, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(AMessage).to(fanoutExchange);
    }

    @Bean
    Binding bindingExchangeB(Queue BMessage, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(BMessage).to(fanoutExchange);
    }

    @Bean
    Binding bindingExchangeC(Queue CMessage, FanoutExchange fanoutExchange) {
        return BindingBuilder.bind(CMessage).to(fanoutExchange);
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章