Apache Artemis - SpringBoot Artemis 애플리케이션으로 JMS 메시지를 생성/소비하는 방법.
11963 단어 apachespringbootartemisjms
Apache ActiveMQ Artemis는 ActiveMQ/HornetQ/Apollo의 결합된 기능 세트입니다. 뛰어난 성능을 위한 논블로킹 아키텍처를 제공합니다. 따라서 자습서JavaSampleApproach에서 다음을 수행하는 방법을 안내합니다.
SpringBoot Artemis 애플리케이션으로 JMS 생산자/소비자를 생성합니다.
관련 게시물:
I. 기술
– 자바 8
– 메이븐 3.6.1
– Spring 도구 모음: 버전 3.8.4.RELEASE
– 스프링 부트: 1.5.4.RELEASE
– 아파치 아르테미스 2.1.0
II. 스프링부트 아르테미스
1. SpringBoot 자동 구성
클래스 경로에
artemis-jms-client
Artemis가 있는 경우 Spring Boot는 ConnectionFactory를 자동 구성할 수 있습니다.Artemis 구성을 제어하기 위해
spring.artemis.*
를 사용합니다.
spring.artemis.mode=native
spring.artemis.host=localhost
spring.artemis.port=61616
spring.artemis.user=jsa
spring.artemis.password=12345
spring.artemis.mode
에는 2가지 모드가 있습니다: {NATIVE, EMBEDDED}:네이티브: 네이티브 Artemis 프로토콜을 사용하여 브로커에 연결합니다.
EMBEDDED: 응용 프로그램에 브로커를 포함합니다.
2. 메시지 송수신
메시지 전송을 위해 다음을 사용합니다.
JmsTemplate jmsTemplate
@Component
public class ArtemisProducer {
@Autowired
JmsTemplate jmsTemplate;
@Value("${jms.queue.destination}")
String destinationQueue;
public void send(String msg){
jmsTemplate.convertAndSend(destinationQueue, msg);
}
}
수신된 메시지의 경우 다음을 사용합니다.
@JmsListener
:
@Component
public class ArtemisConsumer {
@JmsListener(destination = "${jms.queue.destination}")
public void receive(String msg){
System.out.println("Recieved Message: " + msg);
}
}
3. SpringBoot 아르테미스 애플리케이션
튜토리얼에서는 생산자/소비자를 위한 2개의 SpringBoot Artemis 프로젝트를 생성합니다.
III. 관행
2개의 SpringBoot 프로젝트 {SpringBootArtemisProducer, SpringBootArtemisConsumer}를 만듭니다.
할 단계:
1. Spring Boot 프로젝트 생성
SpringToolSuite를 사용하여 2개의 SpringBoot 프로젝트({SpringBootArtemisProducer, SpringBootArtemisConsumer})를 생성합니다.
SpringBootArtemisProducer의 경우 종속성을 추가합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-artemis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
SpringBootArtemisConsumer의 경우 종속성을 추가합니다.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>artemis-jms-client</artifactId>
<version>2.1.0</version>
</dependency>
SpringBootArtemisProducer에
artemis-jms-client 2.1.0
를 사용하지 않는 이유는 무엇입니까?-> 튜토리얼을 할 때
artemis-jms-client 2.1.0
에 jmsTemplate.convertAndSend
에 대한 버그가 있습니다. 예외는 다음과 같습니다.
java.lang.NoSuchMethodError: org.apache.activemq.artemis.api.core.client.ClientMessage.setUserID(Ljava/lang/Object;)Lorg/apache/activemq/artemis/api/core/Message;
at org.apache.activemq.artemis.jms.client.ActiveMQMessageProducer.doSendx(ActiveMQMessageProducer.java:469) ~[artemis-jms-client-2.1.0.jar:2.1.0]
at org.apache.activemq.artemis.jms.client.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:191) ~[artemis-jms-client-2.1.0.jar:2.1.0]
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:626) ~[spring-jms-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:597) ~[spring-jms-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.jms.core.JmsTemplate$4.doInJms(JmsTemplate.java:574) ~[spring-jms-4.3.10.RELEASE.jar:4.3.10.RELEASE]
Artemis 소비자
spring-boot-starter-artemis - version 1.5.6
에 artemis-jms-client 1.5.5
(@JmsListener
포함)를 사용하지 않는 이유는 무엇입니까?-> 버그가 생겼기 때문에:
Setup of JMS message listener invoker failed for destination 'JSA-QUEUE' - trying to recover. Cause: AMQ119019: Queue already exists JSA-QUEUE
메모:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-artemis</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>
</pre>
<strong>EQUAL TO</strong>:
<pre class="lang:xhtml">
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>artemis-jms-client</artifactId>
<version>1.5.5</version>
</dependency>
2. Artemis 생산자/소비자 구현
위 프로젝트의 경우 application.properties 파일을 열고 Artemis 구성을 추가합니다.
spring.artemis.mode=native
spring.artemis.host=localhost
spring.artemis.port=61616
spring.artemis.user=jsa
spring.artemis.password=12345
jms.queue.destination=JSA-QUEUE
2.1 Artemis 생산자 구현
JmsTemplate
를 사용하여 ArtemisProducer
구현:
package com.javasampleapproach.artemis.jms;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
@Component
public class ArtemisProducer {
@Autowired
JmsTemplate jmsTemplate;
@Value("${jms.queue.destination}")
String destinationQueue;
public void send(String msg){
jmsTemplate.convertAndSend(destinationQueue, msg);
}
}
package com.javasampleapproach.artemis.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.javasampleapproach.artemis.jms.ArtemisProducer;
@RestController
public class RestApiController {
@Autowired
ArtemisProducer producer;
@RequestMapping(value="/produce")
public String produce(@RequestParam("msg")String msg){
producer.send(msg);
return "Done";
}
}
2.2 Artemis 소비자 구현
@JmsListener
를 사용하여 ArtemisConsumer 구현:
package com.javasampleapproach.artemis.jms;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class ArtemisConsumer {
@JmsListener(destination = "${jms.queue.destination}")
public void receive(String msg){
System.out.println("Recieved Message: " + msg);
}
}
3. 아르테미스 배포
Artemis download page으로 이동합니다. 아르테미스 2.1.0 다운로드:
apache-artemis-2.1.0-bin.zip을 추출하면 다음이 있습니다.
명령줄로 Artemis 브로커 jsa-springboot-broker를 만듭니다.
C:\apache-artemis-2.1.0\bin>artemis create "C:\dev\jsa-springboot-broker"
:명령줄로 Artemis 브로커 실행:
"C:\dev\jsa-springboot-broker\bin\artemis" run
4. 실행 및 결과 확인
명령줄을 사용하여 SpringBoot 프로젝트 위에서 빌드 및 실행: {
mvn clean install
, mvn spring-boot:run
}http://localhost:8080/produce?msg=JSA - SpringBoot Artemis, Hello World!
. 결과: -> jconsole.exe를 사용하여 Artemis 대기열에 추가된 메시지를 모니터링합니다.
-> Artemis 소비자의 로그:
Recieved Message: JSA - SpringBoot Artemis, Hello World!
IV. 소스 코드
SpringBootArtemisProducer
SpringBootArtemisConsumer
https://grokonez.com/spring-framework/spring-jms/apache-artemis-produceconsume-jms-messages-springboot-artemis-applications
Reference
이 문제에 관하여(Apache Artemis - SpringBoot Artemis 애플리케이션으로 JMS 메시지를 생성/소비하는 방법.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/loizenai/apache-artemis-how-to-produce-consume-jms-messages-with-springboot-artemis-applications-1pdo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)