>  기사  >  Java  >  SpringBoot는 메시지 대기열 RabbitMQ를 어떻게 통합합니까?

SpringBoot는 메시지 대기열 RabbitMQ를 어떻게 통합합니까?

PHPz
PHPz앞으로
2023-05-16 17:25:061280검색

    소개

    Spring 프로젝트에서는 Spring-Rabbit을 사용하여 RabbitMQ를 운영할 수 있습니다.

    특히 Spring Boot 프로젝트에서는 해당 amqp 스타터 종속성을 도입하기만 하면 RabbitTemplate을 사용하여 전송하는 것이 편리합니다. 메시지를 사용합니다.

    일반적으로 개발 프로세스 중:

    Producer 프로젝트:

    • application.yml 파일을 사용하여 RabbitMQ 관련 정보를 구성합니다.

    • 프로듀서 프로젝트에 구성 클래스를 작성하여 스위치와 대기열을 생성하고 바인딩합니다.

    • RabbitTemplate 개체를 삽입하고 RabbitTemplate 개체를 통해 스위치에 메시지를 보냅니다.

    소비자 공학:

    • application.yml 파일을 사용하여 RabbitMQ 관련 정보를 구성합니다.

    • 에서 사용할 메시지 처리 클래스를 만듭니다. 큐 메시지 수신 및 처리

    프로덕션 종료

    1. 생성자 SpringBoot 프로젝트 생성(maven)
    2. 시작 및 종속성 좌표 소개
    5d2ae825d96e6b79836fc3ca23d94234
    gt ;
                              ~                     RabbitTemplate을 삽입하고 메소드를 호출합니다.

    종속성 추가

    다음과 같이 pom.xml 파일 콘텐츠를 수정합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
        </parent>
        <groupId>com.itheima</groupId>
        <artifactId>springboot-rabbitmq-producer</artifactId>
        <version>1.0-SNAPSHOT</version>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-amqp</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
        </dependencies>
    </project>
    Startup class

    package com.itheima.rabbitmq;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication
    public class ProducerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProducerApplication.class);
        }
    }

    RabbitMQ 구성

    구성 파일

    다음 콘텐츠로 application.yml을 생성합니다.

    spring:

    Rabbitmq:

    호스트: localhost

    포트: 5672
    가상 호스트: /itcast

    사용자 이름: heima
    비밀번호: heima


    Bind 스위치 및 대기열

    RabbitMQ 대기열 생성 및 스위치 바인딩 구성 클래스 com.itheima.rabbitmq .config.RabbitMQConfig

    package com.itheima.rahhitmq.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 {
        public static final String EXCHAGE_NAME = "boot_topic_exchange";
        public static final String QUEUE_NAME = "boot_queue";
        // 交换机
        @Bean("bootExchange")
        public Exchange bootExchange(){
            // 构建交换机对象
            return ExchangeBuilder.topicExchange(EXCHAGE_NAME).durable(true).build();
        }
        //Queue 队列
        @Bean("bootQueue")
        public Queue bootQueue(){
            return QueueBuilder.durable(QUEUE_NAME).build();
        }
        //队列和交换机的关系 Binding
        /**
         * 1 知道那个队列
         * 2 知道那个交换机
         * 3 routingKey
         */
        @Bean
        public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange){
            return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
        }
    }
    소비자 프로젝트 빌드

    프로젝트 만들기

    생산 종료

    1. 생산자 SpringBoot 프로젝트 만들기

    2 시작, 종속성 좌표 소개

    org.springframework.boot

    spring-boot -starter-amqp

    yml 구성, 기본 정보 구성 작성

    스위치, 대기열 및 바인딩 관계를 정의하는 구성 클래스

    RabbitTemplate 삽입, 호출 메서드 및 메시지 전송 완료

    종속성 추가


    pom.xml 수정 파일 내용

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
        </parent>
        <groupId>com.itheima</groupId>
        <artifactId>springboot-rabbitmq-consumer</artifactId>
        <version>1.0-SNAPSHOT</version>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-amqp</artifactId>
            </dependency>
        </dependencies>
    </project>

    Startup class

    package com.itheima.rabbitmq;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication
    public class ConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class);
        }
    }

    Configure RabbitMQ

    다음 내용으로 application.yml을 만듭니다.

    spring:

    rabbitmq:

    호스트: localhost

    포트: 5672
    virtual-host: /itcast

    user 이름 : heima
    비밀번호 : heima


    메시지 청취 처리 클래스

    Write 메시지 리스너 com.itheima.rabbitmq.listener.MyListener

    package com.itheima.rabbitmq.listener;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    @Component
    public class MyListener {
        /**
         * 监听某个队列的消息
         * @param message 接收到的消息
         */
        @RabbitListener(queues = "item_queue")
        public void myListener1(String message){
            System.out.println("消费者接收到的消息为:" + message);
        }
    }
    Test

    프로듀서 프로젝트 springboot-rabbitmq-producer에서 테스트 클래스를 생성하고 메시지 보내기 :

    package com.itheima.rabbitmq;
    import com.itheima.rabbitmq.config.RabbitMQConfig;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class RabbitMQTest {
        @Autowired
        private RabbitTemplate rabbitTemplate;
        @Test
        public void test(){
            rabbitTemplate.convertAndSend(RabbitMQConfig.ITEM_TOPIC_EXCHANGE, "item.insert", "商品新增,routing key 为item.insert");
            rabbitTemplate.convertAndSend(RabbitMQConfig.ITEM_TOPIC_EXCHANGE, "item.update", "商品修改,routing key 为item.update");
            rabbitTemplate.convertAndSend(RabbitMQConfig.ITEM_TOPIC_EXCHANGE, "item.delete", "商品删除,routing key 为item.delete");
        }
    }

    먼저 위의 테스트 프로그램을 실행한 다음(스위치와 큐를 먼저 선언하고 바인딩할 수 있음) 소비자를 시작하고 소비자 프로젝트 springboot-rabbitmq-consumer의 콘솔에 해당 메시지가 수신되는지 확인하세요.

    SpringBoot는 RabbitMQ를 빠르게 통합할 수 있는 방법을 제공합니다

    기본 정보는 yml에서 구성하고, 대기열 상호작용자와 바인딩 관계는 구성 클래스의 Bean을 사용하여 구성합니다.

    생산측에서는 RabbitTemplate을 직접 주입하여 메시지 전송을 완료합니다.

    소비자 측에서 직접 사용합니다. 메시지 수신을 완료하는 @RabbitListener

    위 내용은 SpringBoot는 메시지 대기열 RabbitMQ를 어떻게 통합합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제