목차
Producer Project
POM 종속성
응용 파일
Producer 비즈니스 코드
Test
다이렉트 모드
비즈니스 코드
Consumer
메시지 모니터링
Topic 모드
Producer
Java java지도 시간 Springboot가 RabbitMQ 메시지 대기열을 통합하는 방법

Springboot가 RabbitMQ 메시지 대기열을 통합하는 방법

May 13, 2023 pm 10:55 PM
springboot rabbitmq

    Producer Project

    POM 종속성

    프로젝트를 생성할 때 종속성을 직접 추가하도록 선택할 수 있습니다.

    Springboot가 RabbitMQ 메시지 대기열을 통합하는 방법

    Springboot가 RabbitMQ 메시지 대기열을 통합하는 방법

    응용 파일

    rabbitmq에는 기본 주소와 사용자 정보가 있기 때문에 로컬 Rabbitmq라면 따로 설정할 필요가 없습니다.

    Springboot가 RabbitMQ 메시지 대기열을 통합하는 방법

    Springboot가 RabbitMQ 메시지 대기열을 통합하는 방법

    RabbitMQ 구성 파일:

    관련 스위치 및 큐를 사용할 때 해당 스위치 및 큐를 선언해야 합니다. 해당 정보가 없으면 시작 프로젝트가 실패합니다. 따라서 springboot를 사용하여 Rabbitmq를 통합할 때 구성 파일을 사용하여 스위치와 대기열을 선언하고 둘 사이의 관계를 바인딩할 수 있습니다. Fanout 모드는 현재 시연 중이므로 FanoutExchange를 사용하여 스위치를 선언하고, 다른 모드에서는 해당 TopicExchange 및 DirectExchange를 사용하여 선언합니다.

    @Configuration
    public class RabbitMQConfiguration {
    
    //声明fanout模式的交换机
    @Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange("fanout_order_exchange", true, false);
    }
    
    //声明队列
    @Bean
    public Queue smsQueue() {
        return new Queue("sms.fanout.queue", true);
    }
    
    @Bean
    public Queue emailQueue() {
        return new Queue("email.fanout.queue", true);
    }
    
    @Bean
    public Queue duanxinQueue() {
        return new Queue("duanxin.fanout.queue", true);
    }
    //绑定
    
    @Bean
    public Binding smsBinding() {
        return BindingBuilder.bind(smsQueue()).to(fanoutExchange());
    }
    
    @Bean
    public Binding emailBinding() {
        return BindingBuilder.bind(emailQueue()).to(fanoutExchange());
    }
    
    @Bean
    public Binding duanxinBinding() {
        return BindingBuilder.bind(duanxinQueue()).to(fanoutExchange());
    }
    }
    로그인 후 복사
    Producer 비즈니스 코드

    코드의 이 부분은 단순히 RabbitTemplate을 호출하여 메시지를 배포합니다. @Service public class OrderService {

    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    public void makeOrder() {
        // 保存订单
        String orderId = UUID.randomUUID().toString();
        System.out.println("下单成功:" + orderId);
        // 通过MQ完成消息的分发
        // 参数1:交换机 ;参数2:路由key/队列名;参数3:消息内容
        String exchangeName = "fanout_order_exchange";
        rabbitTemplate.convertAndSend(exchangeName, "", orderId);
    }
    }
    로그인 후 복사

    Consumer:

    소비자 엔지니어링은 생산자 엔지니어링과 유사합니다. 먼저 종속성을 도입한 다음 애플리케이션 파일에 관련 구성을 만들어 코드 작성을 시작해야 합니다. 소비자 프로젝트에서는 Rabbitmq 구성 파일을 작성하여 스위치와 대기열을 선언할 수도 있습니다. 컨슈머 측에서 구성 파일을 작성하는 것이 좋습니다. 왜냐하면 컨슈머 측이 가장 먼저 시작하는 프로젝트이기 때문입니다. 스위치와 큐가 생성되지 않으면 프로젝트 시작이 실패합니다. 메시지 수신

    RabbitListener 주석을 통해 메시지 대기열을 수신합니다. 컴포넌트 주석을 통해 스프링 관리에 모니터링을 넘겨야 한다는 점에 유의해야 합니다. 그렇지 않으면 서버로부터 메시지를 정상적으로 수신할 수 없습니다. 여기서는 하나의 이메일 메시지 모니터링만 제공됩니다. 위의 생산자가 선언한 duanxin 및 SMS 대기열은 대기열 이름만 수정하면 됩니다. @Service public class OrderService {

    @RabbitListener(queues = {"email.fanout.queue"})
    @Component
    public class FanoutEmailService {
        @RabbitHandler
        public void receive(String message) {
            System.out.println("email fanout -----》接收到" + message);
        }
    }
    로그인 후 복사

    Test

    먼저 소비자 프로젝트를 시작한 후 생산자 프로젝트에 테스트 클래스를 생성하여 메시지를 보냅니다.

    @SpringBootTest class SpringbootOrderRabbitmqProducerApplicationTests {
    
    @Autowired
    private OrderService orderService;
    
    @Test
    void contextLoads() {
        orderService.makeOrder();
    }
    }
    로그인 후 복사

    메시지를 보낸 후 콘솔에서 소비자가 메시지를 성공적으로 수락했음을 확인할 수 있습니다.

    Springboot가 RabbitMQ 메시지 대기열을 통합하는 방법

    다이렉트 모드

    Producer

    프로젝트를 생성하는 단계는 위와 동일합니다.

    구성 파일

    구성은 기본적으로 위와 동일합니다. 이 부분은 직접 모드를 테스트하기 때문에 스위치를 생성하려면 DirectExchange를 사용해야 합니다. 이 클래스의 메소드 이름은 위의 Rabbitmq 구성 파일에 있는 메소드 이름과 동일할 수 없다는 점에 유의해야 합니다. 왜냐하면 이름이 동일하면 프로젝트 시작이 Bean 주석을 사용하여 전달되기 때문입니다. 실패하다.

    @Configuration
    public class DirectRabbitMQConfiguration {
    
    //声明direct模式的交换机
    @Bean
    public DirectExchange directExchange() {
        return new DirectExchange("direct_order_exchange", true, false);
    }
    
    //声明队列
    @Bean
    public Queue smsDirectQueue() {
        return new Queue("sms.direct.queue", true);
    }
    
    @Bean
    public Queue emailDirectQueue() {
        return new Queue("email.direct.queue", true);
    }
    
    @Bean
    public Queue duanxinDirectQueue() {
        return new Queue("duanxin.direct.queue", true);
    }
    //绑定
    
    @Bean
    public Binding smsDirectBinding() {
        return BindingBuilder.bind(smsDirectQueue()).to(directExchange()).with("sms");
    }
    
    @Bean
    public Binding emailDirectBinding() {
        return BindingBuilder.bind(emailDirectQueue()).to(directExchange()).with("email");
    }
    
    @Bean
    public Binding duanxinDirectBinding() {
        return BindingBuilder.bind(duanxinDirectQueue()).to(directExchange()).with("duanxin");
    }
    }
    로그인 후 복사

    비즈니스 코드

    @Service
    public class OrderService {
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        public void makeOrderDirect() {
            // 保存订单
            String orderId = UUID.randomUUID().toString();
            System.out.println("下单成功:" + orderId);
            String exchangeName = "direct_order_exchange";
            rabbitTemplate.convertAndSend(exchangeName, "sms", orderId);
            rabbitTemplate.convertAndSend(exchangeName, "email", orderId);
        }
    
    }
    로그인 후 복사

    Consumer

    메시지 모니터링

    위와 동일합니다. 대기열 이름만 주의하세요.

    @RabbitListener(queues = {"email.direct.queue"})
    @Component
    public class DirectEmailService {
        @RabbitHandler
        public void receive(String message) {
            System.out.println("email direct -----》接收到" + message);
        }
    }
    로그인 후 복사

    Topic 모드

    위 모드는 모두 구성 파일을 통해 스위치, 대기열 및 바인딩 간의 관계를 선언합니다. 실제로 주석을 통해 스위치와 주석을 선언할 수도 있습니다.

    Producer

    Annotation을 이용하여 선언하기 때문에 설정 파일을 생성할 필요 없이 비즈니스 코드를 직접 작성할 수 있습니다. 테스트할 때 경로 이름만 수정하면 됩니다. 수정 방법에 대한 자세한 내용은 기사 시작 부분의 링크로 이동하여 각 모드의 사용 방법을 확인하세요.

    @Service
    public class OrderService {
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    public void makeOrderTopic() {
        // 保存订单
        String orderId = UUID.randomUUID().toString();
        System.out.println("下单成功:" + orderId);
        String exchangeName = "topic_order_exchange";
        String routingKey = "com.email";
        rabbitTemplate.convertAndSend(exchangeName, routingKey, orderId);
    }
    }
    로그인 후 복사

    Consumer

    코드는 기본적으로 위와 동일합니다. 차이점은 큐를 직접 바인딩하고 RabbitListener 주석에서 전환한다는 것입니다. 각 매개변수에는 문자열이 사용된다는 점에 유의해야 합니다. 값은 큐에 해당하며 해당 매개변수는 큐 이름, 지속성 및 자동 삭제입니다. 교환에 해당하는 스위치의 경우 해당 매개변수는 스위치 이름과 스위치 유형입니다. 키는 경로 이름에 해당합니다.

    아아아아

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

    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    뜨거운 도구

    메모장++7.3.1

    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    RabbitMQ를 사용하여 PHP에서 분산 메시지 처리를 구현하는 방법 RabbitMQ를 사용하여 PHP에서 분산 메시지 처리를 구현하는 방법 Jul 18, 2023 am 11:00 AM

    RabbitMQ를 사용하여 PHP에서 분산 메시지 처리를 구현하는 방법 소개: 대규모 애플리케이션 개발에서 분산 시스템은 일반적인 요구 사항이 되었습니다. 분산 메시지 처리는 작업을 여러 처리 노드에 분산하여 시스템의 효율성과 안정성을 향상시키는 패턴입니다. RabbitMQ는 AMQP 프로토콜을 사용하여 메시지 전달 및 처리를 구현하는 신뢰할 수 있는 오픈 소스 메시지 대기열 시스템입니다. 이 기사에서는 배포를 위해 PHP에서 RabbitMQ를 사용하는 방법을 다룹니다.

    React와 RabbitMQ를 사용하여 안정적인 메시징 앱을 구축하는 방법 React와 RabbitMQ를 사용하여 안정적인 메시징 앱을 구축하는 방법 Sep 28, 2023 pm 08:24 PM

    React 및 RabbitMQ를 사용하여 안정적인 메시징 애플리케이션을 구축하는 방법 소개: 최신 애플리케이션은 실시간 업데이트 및 데이터 동기화와 같은 기능을 달성하기 위해 안정적인 메시징을 지원해야 합니다. React는 사용자 인터페이스 구축을 위한 인기 있는 JavaScript 라이브러리인 반면 RabbitMQ는 안정적인 메시징 미들웨어입니다. 이 기사에서는 React와 RabbitMQ를 결합하여 안정적인 메시징 애플리케이션을 구축하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. RabbitMQ 개요:

    SpringBoot와 SpringMVC의 비교 및 ​​차이점 분석 SpringBoot와 SpringMVC의 비교 및 ​​차이점 분석 Dec 29, 2023 am 11:02 AM

    SpringBoot와 SpringMVC는 모두 Java 개발에서 일반적으로 사용되는 프레임워크이지만 둘 사이에는 몇 가지 분명한 차이점이 있습니다. 이 기사에서는 이 두 프레임워크의 기능과 용도를 살펴보고 차이점을 비교할 것입니다. 먼저 SpringBoot에 대해 알아봅시다. SpringBoot는 Spring 프레임워크를 기반으로 하는 애플리케이션의 생성 및 배포를 단순화하기 위해 Pivotal 팀에서 개발되었습니다. 독립 실행형 실행 파일을 구축하는 빠르고 가벼운 방법을 제공합니다.

    Go에서 RabbitMQ 사용: 전체 가이드 Go에서 RabbitMQ 사용: 전체 가이드 Jun 19, 2023 am 08:10 AM

    최신 애플리케이션의 복잡성이 증가함에 따라 메시징은 강력한 도구가 되었습니다. 이 분야에서 RabbitMQ는 다양한 애플리케이션 간에 메시지를 전달하는 데 사용할 수 있는 매우 인기 있는 메시지 브로커가 되었습니다. 이 기사에서는 Go 언어에서 RabbitMQ를 사용하는 방법을 살펴보겠습니다. 이 가이드에서는 다음 내용을 다룹니다. RabbitMQ 소개 RabbitMQ 설치 RabbitMQ 기본 개념 Go에서 RabbitMQ 시작하기 RabbitMQ 및 Go

    SpringBoot+Dubbo+Nacos 개발 실습 튜토리얼 SpringBoot+Dubbo+Nacos 개발 실습 튜토리얼 Aug 15, 2023 pm 04:49 PM

    이 글에서는 dubbo+nacos+Spring Boot의 실제 개발에 대해 이야기하기 위해 자세한 예제를 작성하겠습니다. 이 기사에서는 이론적 지식을 너무 많이 다루지는 않지만 dubbo를 nacos와 통합하여 개발 환경을 신속하게 구축하는 방법을 설명하는 가장 간단한 예를 작성합니다.

    go-zero와 RabbitMQ의 응용실습 go-zero와 RabbitMQ의 응용실습 Jun 23, 2023 pm 12:54 PM

    이제 점점 더 많은 회사들이 마이크로서비스 아키텍처 모델을 채택하기 시작하고 있으며 이 아키텍처에서 메시지 큐는 중요한 통신 방법이 되었으며 그 중 RabbitMQ가 널리 사용됩니다. Go 언어에서 go-zero는 최근 몇 년 동안 등장한 프레임워크로, 개발자가 메시지 대기열을 보다 쉽게 ​​사용할 수 있도록 다양한 실용적인 도구와 방법을 제공합니다. 아래에서는 실제 응용 프로그램을 기반으로 한 go-zero를 소개합니다. RabbitMQ의 응용실습. 1.RabbitMQ 개요Rabbit

    Golang과 RabbitMQ 간의 실시간 데이터 동기화 솔루션 Golang과 RabbitMQ 간의 실시간 데이터 동기화 솔루션 Sep 27, 2023 pm 10:41 PM

    Golang과 RabbitMQ 간의 실시간 데이터 동기화 솔루션 소개: 오늘날 인터넷의 대중화와 데이터 양의 폭발적인 증가로 인해 실시간 데이터 동기화가 점점 더 중요해지고 있습니다. 비동기 데이터 전송 및 데이터 동기화 문제를 해결하기 위해 많은 회사에서는 메시지 대기열을 사용하여 데이터의 실시간 동기화를 달성하기 시작했습니다. 이 글에서는 Golang과 RabbitMQ를 기반으로 한 실시간 데이터 동기화 솔루션을 소개하고 구체적인 코드 예시를 제공합니다. 1. RabbitMQ란 무엇인가요? 랍비

    Golang RabbitMQ: 고가용성 메시지 대기열 시스템의 아키텍처 설계 및 구현 Golang RabbitMQ: 고가용성 메시지 대기열 시스템의 아키텍처 설계 및 구현 Sep 28, 2023 am 08:18 AM

    GolangRabbitMQ: 고가용성 메시지 대기열 시스템의 아키텍처 설계 및 구현에는 특정 코드 예제가 필요합니다. 소개: 인터넷 기술의 지속적인 발전과 광범위한 응용으로 인해 메시지 대기열은 현대 소프트웨어 시스템에서 없어서는 안될 부분이 되었습니다. 분리, 비동기 통신, 내결함성 처리 및 기타 기능을 구현하는 도구로서 메시지 큐는 분산 시스템에 대한 고가용성 및 확장성 지원을 제공합니다. 효율적이고 간결한 프로그래밍 언어인 Golang은 높은 동시성 및 고성능 시스템을 구축하는 데 널리 사용됩니다.

    See all articles