jms의 반환 값을 사용하여 작업을 위임하는 웹앱

user3308224

JMS를 사용하는 두 개의 프로젝트, 프로젝트 A와 B를 생성하라는 요청을 받았습니다. B는 두 개의 날짜 (시작 날짜-종료 날짜)를 입력하는 양식이 포함 된 간단한 페이지가있는 웹 프로젝트입니다. 양식을 제출 한 후 B는 A에게 두 날짜를 기준으로 작업 처리 (파일 쿼리)를 요청합니다. 그러면 B는 웹 페이지에 결과를 표시합니다. 주의 사항은 jms에서이 작업을 수행해야한다는 것입니다.

내 B 컨트롤러에서 이것에 대해 생각하고 있습니다 (간체. 저는 spring을 사용하고 있습니다)

@controller
Mycontroller{
   MyMessageProducer mp;

   @RequestMapping(....)
   public String(...){

     mp.sendMessage(...);

    //wait for the response here and render?

   }    
}

이제 프로젝트 A를 구현하는 방법에 갇혀 있습니다. 지점 간 메시징 (큐 사용)을 사용하는 경우 A는 대기열에서 메시지를 명시 적으로 가져와야합니다 (activemq 사용). A가 요청을 자동으로 수신해야하기 때문에 안타깝지 않습니까? 그러나 게시자-구독자를 사용하면이 경우 게시자는 B, 클라이언트 (B가 A에게 메시지를 보내기 때문에)가 될 것입니다. 이것은 나쁜 해결책이라고 생각합니다. 어떤 전략을 사용해야합니까?

이제 A가 메시지를 성공적으로 수신하고 파일을 쿼리한다고 가정합니다. B가 웹 페이지에 결과를 표시 할 수 있도록 결과를 B에 다시 보내려면 어떻게해야합니까? 이것을 할 방법이 있습니까?

(PS 나는 이미 튜토리얼을 기반으로 간단한 생산자와 수신기를 구현했지만 JMS를 처음 사용합니다)

폴 삼 소다

가장 쉬운 방법 인 IMO 게이트웨이 개념을 가진 Spring Integration 을 사용 하는 것입니다 ( Enterprise Integration Patterns 참조 ). 반환 값이있는 메서드가있는을 지정할 수 있습니다 . 같은 것service-interface

public interface MessageProducer {
    @Gateway
    public String sendMessageAndGetReply(String name);
}

인터페이스의 프록시가 생성됩니다. <int:gateway>요소 에서 참조 할 때 . 같은 것

<int:channel id="requestChannel"/>
<int:channel id="replyChannel"/>

<int:gateway id="messageProducerGateway" default-request-channel="requestChannel"
    default-reply-channel="replyChannel"
    service-interface="demo.MessageProducer">
</int:gateway>

<int-jms:outbound-gateway id="outboundJmsGateway"
    connection-factory="connectionFactory" reply-channel="replyChannel"
    request-channel="requestChannel" reply-destination-name="reply.queue"
    request-destination-name="request.queue">
</int-jms:outbound-gateway>

<int-jms:outbound-gateway>는 JMS 큐 밖으로 메시지를 보내고 답장을 받게됩니다. connectionFactory평범한 ConnectionFactory인스턴스입니다 (예 : ActiveMQConnectionFactory, CachingConnectionFactory)

jms 상호 작용의 "서버"측에서 <int-jms:inbound-gateway>, Something like

<int-jms:inbound-gateway id="inboundJmsGateway"
    request-channel="requestChannel" acknowledge="client"
    connection-factory="connectionFactory" request-destination-name="request.queue" />

<int:service-activator id="messageHandler" ref="serverMessageHandler"
    input-channel="requestChannel">
</int:service-activator>

serverMessageHandler처리하고 게이트웨이에 대한 응답을 다시 반환하는 방법으로 단순한 구성 요소입니다.

@Component
public class ServerMessageHandler {

    @ServiceActivator
    public String handleMessage(String message) {
        return "Hello, " + message;
    }
}

간단한 데모 실행

AbstractApplicationContext client = new ClassPathXmlApplicationContext("demo-gateway.xml");
AbstractApplicationContext server = new ClassPathXmlApplicationContext("demo-gateway-server.xml");
MessageProducer producer = client.getBean(MessageProducer.class);
String returnedMessage = producer.sendMessageAndGetReply("StackOverflow");
System.out.println(returnedMessage);

당신은 얻는다 "Hello, StackOverflow". 프레임 워크에 대한 기본적인 이해를하게되면 그다지 많지 않습니다. 동기식 예제를 제공 한 예제입니다. github의 spring-integration-samples 에서 전체 예제 (다른 예제와 함께)를 볼 수 있습니다 . 기본 사항에 익숙해지기 위해 참조 가이드를 살펴 보는 데 시간이 걸립니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

반환 값을 사용하여 알 수없는 수의 병렬 작업 시작

분류에서Dev

임의의 값을 반환하는 Sendto

분류에서Dev

임의 순서로 값을 반환하는 promises 함수를 사용하여 배열을 반복하는 Javascript

분류에서Dev

두 개의 비교 값을 사용하여 외부 값을 반환하는 Excel

분류에서Dev

beautifulsoup을 사용하여 html 태그 내부의 값을 반환

분류에서Dev

웹 작업자는 setTimeout을 사용하더라도 하나의 메시지 만 반환하고 이후에는 메시지를 반환하지 않습니다.

분류에서Dev

VLOOKUP을 사용하여 CONCATENATED 텍스트의 MAX 값 반환

분류에서Dev

`then`을 사용하여 약속 값 반환

분류에서Dev

Android 앱의 비동기 작업에서 비트 맵을 반환하는 방법

분류에서Dev

pyqt 웹킷을 사용하여 Django 앱을 데스크톱 앱으로 변환

분류에서Dev

작업을 반환하는 작업과 기능의 차이

분류에서Dev

C에서 반환 값을 사용하는 작업

분류에서Dev

값 배열을 사용하여 GitHub 작업 워크 플로의 단계 반복

분류에서Dev

함수는 Android에서 음수 값을 반환하지만 Flutter 앱의 웹에서는 양수를 반환합니다.

분류에서Dev

Factory 메서드의 반환 값을 사용하여 시작 클래스에 Singleton을 추가하는 방법

분류에서Dev

fullCalender를 사용하여 작업 표 웹 앱을 만들려고합니다.

분류에서Dev

OData WebAPI 작업을 사용하여 탐색 속성을 반환하는 방법

분류에서Dev

반복 작업을위한 Heroku 스케줄러 및 비동기 작업을위한 지연된 작업, 모두 하나의 웹 dyno를 사용합니다.

분류에서Dev

색상 서식을 사용하여 시트 / 엑셀의 두 셀을 기반으로 값을 반환하는 IF 문

분류에서Dev

스위치를 사용하여 값을 반환하는 Java 일반 함수

분류에서Dev

axios가 여러 값을 반환하는 Redux Thunk 작업

분류에서Dev

dropdownlist의 findbyvalue를 사용하여 null을 반환하는 방법

분류에서Dev

비동기를 사용하여 작업을 반환하는 경우

분류에서Dev

'정의되지 않음'을 반환하는 React 웹 앱의 배열을 통한 매핑

분류에서Dev

renderUI 반짝이 앱 R을 사용하여 텍스트 상자 번호의 값을 표시하는 방법

분류에서Dev

R을 사용하여 데이터 프레임에서 개별 열의 최소값을 기반으로 특정 열의 행을 하위 집합하는 방법

분류에서Dev

os 모듈을 사용하여 Python의 현재 작업 디렉토리 바로 위에있는 디렉토리 이름을 반환합니다.

분류에서Dev

Object가 Perl에서 임의의 값을 반환하는 이유

분류에서Dev

XML에서 삽입을 사용하여 하위 쿼리가 둘 이상의 값을 반환했습니다.

Related 관련 기사

  1. 1

    반환 값을 사용하여 알 수없는 수의 병렬 작업 시작

  2. 2

    임의의 값을 반환하는 Sendto

  3. 3

    임의 순서로 값을 반환하는 promises 함수를 사용하여 배열을 반복하는 Javascript

  4. 4

    두 개의 비교 값을 사용하여 외부 값을 반환하는 Excel

  5. 5

    beautifulsoup을 사용하여 html 태그 내부의 값을 반환

  6. 6

    웹 작업자는 setTimeout을 사용하더라도 하나의 메시지 만 반환하고 이후에는 메시지를 반환하지 않습니다.

  7. 7

    VLOOKUP을 사용하여 CONCATENATED 텍스트의 MAX 값 반환

  8. 8

    `then`을 사용하여 약속 값 반환

  9. 9

    Android 앱의 비동기 작업에서 비트 맵을 반환하는 방법

  10. 10

    pyqt 웹킷을 사용하여 Django 앱을 데스크톱 앱으로 변환

  11. 11

    작업을 반환하는 작업과 기능의 차이

  12. 12

    C에서 반환 값을 사용하는 작업

  13. 13

    값 배열을 사용하여 GitHub 작업 워크 플로의 단계 반복

  14. 14

    함수는 Android에서 음수 값을 반환하지만 Flutter 앱의 웹에서는 양수를 반환합니다.

  15. 15

    Factory 메서드의 반환 값을 사용하여 시작 클래스에 Singleton을 추가하는 방법

  16. 16

    fullCalender를 사용하여 작업 표 웹 앱을 만들려고합니다.

  17. 17

    OData WebAPI 작업을 사용하여 탐색 속성을 반환하는 방법

  18. 18

    반복 작업을위한 Heroku 스케줄러 및 비동기 작업을위한 지연된 작업, 모두 하나의 웹 dyno를 사용합니다.

  19. 19

    색상 서식을 사용하여 시트 / 엑셀의 두 셀을 기반으로 값을 반환하는 IF 문

  20. 20

    스위치를 사용하여 값을 반환하는 Java 일반 함수

  21. 21

    axios가 여러 값을 반환하는 Redux Thunk 작업

  22. 22

    dropdownlist의 findbyvalue를 사용하여 null을 반환하는 방법

  23. 23

    비동기를 사용하여 작업을 반환하는 경우

  24. 24

    '정의되지 않음'을 반환하는 React 웹 앱의 배열을 통한 매핑

  25. 25

    renderUI 반짝이 앱 R을 사용하여 텍스트 상자 번호의 값을 표시하는 방법

  26. 26

    R을 사용하여 데이터 프레임에서 개별 열의 최소값을 기반으로 특정 열의 행을 하위 집합하는 방법

  27. 27

    os 모듈을 사용하여 Python의 현재 작업 디렉토리 바로 위에있는 디렉토리 이름을 반환합니다.

  28. 28

    Object가 Perl에서 임의의 값을 반환하는 이유

  29. 29

    XML에서 삽입을 사용하여 하위 쿼리가 둘 이상의 값을 반환했습니다.

뜨겁다태그

보관