Springboot 통합 ActiveMQ(Queue 와 Topic 두 가지 모드)

앞 에 쓰 기:2018 년 말 부터 SpringBoot 를 배우 기 시 작 했 고 SpringBoot 로 도 프로젝트 를 쓴 적 이 있 습 니 다.Springboot 를 배 우 는 지식 에 대한 정 리 를 기록 합 니 다.만약 당신 도 SpringBoot 를 배우 고 있다 면,나 를 주목 하고,함께 공부 하고,함께 진보 할 수 있 습 니 다.
ActiveMQ 안내
1.ActiveMQ 안내
Apache ActiveMQ 는 Apache 소프트웨어 재단 이 개발 한 오픈 소스 메시지 미들웨어 이다.ActiveMQ 는 순수한 자바 프로그램 이기 때문에 운영 체제 가 자바 가상 머 신 을 지원 하면 ActiveMQ 가 실 행 될 수 있 습 니 다.
2.ActiveMQ 다운로드
다운로드 주소:http://activemq.apache.org/components/classic/download/

다운로드 완료 후 압축 을 풀 고 activemq.bat 파일 을 더 블 클릭 하여 엽 니 다(설치 하지 않 고 직접 사용).디 렉 터 리 와 열 면 다음 과 같은 효과 가 있 습 니 다.


실행 후 브 라 우 저 방문http://localhost:8161/주소 가 인터페이스 에 들 어 갑 니 다.

Manage ActiveMQ broker 를 누 르 면 ActiveMQ 관리 페이지 에 로그 인 합 니 다.기본 계 정과 비밀 번 호 는 모두 admin 입 니 다.관리 페이지 는 다음 과 같 습 니 다.

SpringBoot 통합 ActiveMQ
1.새로운 SpringBoot 프로젝트
새 Springboot 프로젝트 를 만 들 고 의존 도 를 추가 합 니 다.프로젝트 의 전체 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 https://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.2.5.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.mcy</groupId>
 <artifactId>springboot-mq</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>springboot-mq</name>
 <description>Demo project for Spring Boot</description>

 <properties>
  <java.version>1.8</java.version>
 </properties>

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

  <!--Activemq  -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-activemq</artifactId>
  </dependency>

  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
   <exclusions>
    <exclusion>
     <groupId>org.junit.vintage</groupId>
     <artifactId>junit-vintage-engine</artifactId>
    </exclusion>
   </exclusions>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>
</project>
2.프로젝트 구조
3.관련 설정 정보
application.properties 클래스 에 ActiveMQ 와 관련 된 설정 정 보 를 추가 합 니 다.

server.port=8080
server.servlet.context-path=/mq

#MQ     
spring.activemq.broker-url=tcp://localhost:61616
#   
spring.activemq.user=admin
#  
spring.activemq.password=admin
#   Queue    Topic,false Queue,true Topic,  false-Queue
spring.jms.pub-sub-domain=false
#spring.jms.pub-sub-domain=true

#  ,     topic   
myqueue: activemq-queue
mytopic: activemq-topic
4.ActiveMQ 설정 클래스
ActiveMQ 설정 클래스 ConfigBean,Queue 대기 열과 topic 두 가지 모드 를 설 정 했 습 니 다.코드 는 다음 과 같 습 니 다.

import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.stereotype.Component;
import javax.jms.Topic;

/**
 1. MQ   
 */
@Component
@EnableJms
public class ConfigBean {
 @Value("${myqueue}")
 private String myQueue;
 @Value("${mytopic}")
 private String topicName;

 //  
 @Bean
 public ActiveMQQueue queue(){
  return new ActiveMQQueue(myQueue);
 }

 //topic
 @Bean
 public Topic topic(){
  return new ActiveMQTopic(topicName);
 }
}
대기 열 모드
대기 열 모드 즉 점 대 점 전송.
점 대 점 메시지 전달 역 의 특징 은 다음 과 같다.
모든 소식 은 1 대 1 과 유사 한 소비자 만 있 을 수 있다.마치 개인 택배 로 자기가 받 은 것 과 같다.
소식 의 생산자 와 소비자 사이 에는 시간 적 상관 성 이 없다.소비자 가 생산자 가 메 시 지 를 보 낼 때 운행 상태 에 있 든 없 든 간 에 소비 자 는 메 시 지 를 추출 할 수 있다.마치 우리 가 문 자 를 보 내 는 것 처럼 발송 자가 보 낸 후에 수신 자가 바로 받 고 바로 보 는 것 은 아니다.
소식 이 소 비 된 후 대열 에 저장 되 지 않 기 때문에 소비 자 는 이미 소 비 된 소식 을 소비 하지 않 을 것 이다.
1.대기 열 생산자
Queue ProducerController 클래스 는 대기 열 생산자 컨트롤 러 로 메시지 대기 열 에 메 시 지 를 보 냅 니 다.코드 는 다음 과 같 습 니 다:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.jms.Queue;

/*
 *        
 */
@RestController
public class QueueProducerController {
 @Autowired
 private JmsMessagingTemplate jmsMessagingTemplate;

 @Autowired
 private Queue queue;

 /*
  *      
  */
 @RequestMapping("/sendmsg")
 public void sendmsg(String msg) {
  System.out.println("       :" + msg);
  //              
  this.jmsMessagingTemplate.convertAndSend(this.queue, msg);
 }
}
2.대열 소비자
Queue Consumer Controller 류 는 대기 열 소비자 컨트롤 러 이 고 구체 적 인 코드 는 다음 과 같 습 니 다.

import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.web.bind.annotation.RestController;

/*
 1.   queue      
 */
@RestController
public class QueueConsumerController {
 /*
  *        
  */
 @JmsListener(destination="${myqueue}")
 public void readActiveQueue(String message) {
  System.out.println("   :" + message);
 }
}
3.테스트 효과
실행 항목 브 라 우 저 에서 접근http://localhost:8080/mq/sendmsg?msg=123。메시지 큐 에 123 을 보 냅 니 다.콘 솔 출력 효과:

ActiveMQ 콘 솔 표시:

Number Of Pending Messages:메시지 대기 열 에서 처리 해 야 할 메시지Number of Consumers:소비자 수Messages Enqueued:메시지 대기 열 에 누적 입장 한 총량Messages Dequeued:누적 소 비 된 메시지 의 총량[주]대기 열 모드 에서 설정 파일 application.properties 에서 spring.jms.pub-sub-domain 속성 은 false 로 설정 해 야 합 니 다.
Topic 모드
topic 모드 는 게시/구독 모드 를 기반 으로 전송 합 니 다.
게시/구독 모드 의 전송 특징 은 다음 과 같 습 니 다.
  • 생산 자 는 메 시 지 를 topic 에 발표 하고 모든 메 시 지 는 여러 명의 소비자 가 있 을 수 있 으 며 1:N 의 관계 에 속한다
  • 생산자 와 소비자 사이 에는 시간 적 상관 성 이 있다.어떤 주 제 를 구독 하 는 소비 자 는 구독 한 후에 발표 하 는 소식 만 소비 할 수 있다4.567917.생산자 가 생산 할 때 topic 는 정 보 를 저장 하지 않 고 상태 가 없 는 불 착지 이다.만약 에 구독 자가 없 으 면 생산 하 는 것 은 폐 소식 이다1.토픽 생산자
    Topic ProducerController 류 는 topic 생산자 컨트롤 러 로 메시지 큐 에 메 시 지 를 보 냅 니 다.코드 는 다음 과 같 습 니 다:
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jms.core.JmsMessagingTemplate;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import javax.jms.Queue;
    import javax.jms.Topic;
    
    /*
    * topic     
    */
    @RestController
    public class TopicProducerController {
     @Autowired
     private JmsMessagingTemplate jmsMessagingTemplate;
    
     @Autowired
     private Topic topic;
    
     /*
     *      
     */
     @RequestMapping("/topicsendmsg")
     public void sendmsg(String msg) {
      System.out.println("     MQ:" + msg);
      //              
      this.jmsMessagingTemplate.convertAndSend(this.topic, msg);
     }
    }
    2.토픽 소비자
    Topic Consumer Controller 류 는 topic 소비자 컨트롤 러 로 그 중에서 두 가지 소비자 방법 을 썼 는데 두 명의 사용자 가 구독 하 는 것 으로 이해 할 수 있다.구체 적 인 코드 는 다음 과 같다.
    
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.web.bind.annotation.RestController;
    
    /*
     1. topic      
     */
    @RestController
    public class TopicConsumerController {
     /*
      *        
      */
     @JmsListener(destination="${mytopic}")
     public void readActiveQueue(String message) {
      System.out.println("   :" + message);
     }
    
     @JmsListener(destination="${mytopic}")
     public void readActiveQueue1(String message) {
      System.out.println("   :" + message);
     }
    }
    3.테스트 효과
    실행 항목 브 라 우 저 에서 접근http://localhost:8080/mq/topicsendmsg?msg=123。메시지 큐 에 123 을 보 냅 니 다.콘 솔 출력 효과(두 가지 소비자 방법 이 있 음):

    ActiveMQ 콘 솔 표시:

    Number of Consumers:소비자 수Messages Enqueued:메시지 대기 열 에 누적 입장 한 총량Messages Dequeued:누적 소 비 된 메시지 의 총량【주】Topic 모드 에서 설정 파일 application.properties 에서 spring.jms.pub-sub-domain 속성 은 true 로 설정 해 야 합 니 다.
    Springboot 통합 ActiveMQ(Queue 와 Topic 두 가지 모드)에 대한 자세 한 설명 은 여기까지 입 니 다.더 많은 Springboot 통합 ActiveMQ 내용 은 이전 글 을 검색 하거나 아래 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기