向camel发送消息及消息处理过程跟踪

package hello;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.Route;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.processor.interceptor.Tracer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
 
@Configuration
@ComponentScan
public class Application {
 
	@Bean
	MessageService mockMessageService() {
		return new MessageService() {
			public String getMessage() {
				return "Hello World!";
			}
		};
	}
 
	private static class ConsoleLog implements Processor {
 
		public void process(Exchange exchange) throws Exception {
 
			Message in = exchange.getIn();
			Map<String, Object> headers = in.getHeaders();
			for(String k:headers.keySet())
				System.out.println(k+":"+headers.get(k));
 
		}
 
		public String toString() {
			return "ConsoleLog";
		}
 
	}
 
	public static void main(String[] args) throws Exception {
		ApplicationContext context = new AnnotationConfigApplicationContext(
				Application.class);
 
		MessagePrinter printer = context.getBean(MessagePrinter.class);
		printer.printMessage();
		Tracer tracer = new Tracer();
		CamelContext cc = new DefaultCamelContext();
 
		cc.addRoutes(new RouteBuilder() {
			public void configure() {
				from("file://d:/home/in?noop=true").to("file:d:/home/out");
			}
		});
 
		cc.addRoutes(new RouteBuilder() {
			public void configure() {
				from("direct:bar")
				.to("log:org.springframework?level=ERROR&showHeaders=true")
				.process(new ConsoleLog());
			}
		});
 
		cc.addInterceptStrategy(tracer);
		cc.start();
		cc.setTracing(true);
		Thread.sleep(1000);
 
		ProducerTemplate template = cc.createProducerTemplate();
 
		HashMap<String, Object> map = new HashMap<String, Object>();
		template.setDefaultEndpointUri("direct:bar");
		map.put("sender", "1234");
		map.put("receiver", "4321");
		map.put("messageType", "order");
		Endpoint ep = cc.getEndpoint("direct:bar");
 
		for (int i = 0; i < 5; i++) {
 
			template.sendBodyAndHeader(ep,""+Math.random(), map);
		}
 
		List<Route> routes = cc.getRoutes();
		for (Route r : routes) {
 
			System.out.println(r.getId());
		}
 
		Thread.sleep(100000);
		cc.stop();
 
	}
}

 

你可能感兴趣的:(ESB,camel)