티스토리 뷰

Programming/Java

Camel Header 설정

파란크리스마스 2014. 9. 25. 10:19
728x90

참고 : http://camel.apache.org/jms.html

RouteBuilder

	from("jms:queue:test1?maxConcurrentConsumers=1&maxMessagesPerTask=1&autoStartup=true&preserveMessageQos=true")
	.bean(com.bluexmas.Test1Queue.class, "doTest")
	.to("jms:queue:test2");
	
	from("jms:queue:test2?maxConcurrentConsumers=1&maxMessagesPerTask=1&autoStartup=true&preserveMessageQos=true")
	.bean(com.bluexmas.Test2Queue.class, "doTest")
	.to("stream:out");

Header1Object

package com.bluexmas;

import java.io.Serializable;

public class Header1Object implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	int age;
	String name;
	
	public Header1Object(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}

	@Override
	public String toString() {
		return "Header1Object [age=" + age + ", name=" + name + "]";
	}
}

Test1Queue

package com.bluexmas;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.camel.Exchange;
import org.apache.camel.Message;

import com.uni.fep.bean.service.MQSenderService;
import com.uni.fep.bean.util.BeanUtils;
import com.uni.fep.bean.util.EnvironmentInit;

public class Test1Queue {
	
	public void doTest(Exchange exchange) {
		System.out.println("-- Test1Queue.doTest ----------------------------");
		
		Message in = exchange.getIn();
		
		System.out.println("body = " + in.getBody());
		System.out.println("header1 = " + in.getHeader("header1"));
		System.out.println("header2 = " + in.getHeader("header2"));
		
		in.setHeader("header1", "value1-1");
		in.setHeader("header2", "value2");
		
		List<String> listValue = new ArrayList<String>();
		listValue.add("list1");
		listValue.add("list2");
		in.setHeader("header3", listValue);
		System.out.println("header3 = " + in.getHeader("header3"));
		
		in.setHeader("header4", new Header1Object(10, "bluexmas"));
		System.out.println("header4 = " + in.getHeader("header4"));
	}
	
	public static void main(String[] args) throws Exception {
		EnvironmentInit.init();
		
		MQSenderService service = (MQSenderService)BeanUtils.getBean("MQSenderService");
		
		String message = "Hello Camel";
		
		Map<String, Object>map=new HashMap<String,Object>();
		map.put("header1", "value1");
		
		service.doSend("test1", map, message);
		
		Thread.sleep(5000);
		
		System.exit(0);
	}

}

Test2Queue

package com.bluexmas;

import org.apache.camel.Exchange;
import org.apache.camel.Message;

public class Test2Queue {

	public void doTest(Exchange exchange) {
		System.out.println("-- Test2Queue.doTest ----------------------------");
		
		Message in = exchange.getIn();
		
		System.out.println("body = " + in.getBody());
		System.out.println("header1 = " + in.getHeader("header1"));
		System.out.println("header2 = " + in.getHeader("header2"));
		System.out.println("header3 = " + in.getHeader("header3"));
		System.out.println("header4 = " + in.getHeader("header4"));
	}
	
}

출력결과

-- Test1Queue.doTest ----------------------------
body = Hello Camel
header1 = value1
header2 = null
header3 = [list1, list2]
header4 = Header1Object [age=10, name=bluexmas]
-- Test2Queue.doTest ----------------------------
body = Hello Camel
header1 = value1-1
header2 = value2
header3 = null
header4 = null
Hello Camel

설명

Camel에서 기본적으로 Header의 내용은 Queue 넘어 갈때 초기화 되는데, 
초기화 하지 않고, 그대로 데이터를 가지고 다니려면 preserveMessageQos=true 해주면 된다.

출력결과를 보시면 알 수 있듯이 기본 자료형외에 객체는 전달 할 수가 없는 것으로 판단된다.

header1 : 초기에 전달된 Header의 값으로 그 값을 변경했을때 변경된 값이 전달되는 것을 확인
header2 : 초기에 전달되지 않았으나 추가로 Header에 추가된 값으로 Queue 이동 후 값이 존재하는 것을 확인
Header3 : ArreyList에 기본형 데이터(String) 추가해서 Header에 추가해서 전달했으나 List 전달되지 않는 것으로 확인
Header4 : 사용자가 임으로 만들 객체를 Header에 추가 했으나 Queue 이동 후 값이 전달되지 않는 것으로 확인

댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함