Spring集成 Apache Camel: AWS-SQS

本文介绍如何将Spring应用与Apache Camel结合,利用AWS-SQS进行消息队列的集成。首先概述了AWS SQS作为消息队列服务的角色和特点,接着详细介绍了Apache Camel的规则路由引擎功能。通过示例展示了如何配置Camel来从SQS接收消息并分发到不同子系统。
摘要由CSDN通过智能技术生成

将数据发送到AWS-SQS  然后通过Apache Camel接收SQS消息然后路由分发到不同的子系统中

一、AWS SQS简介
Amazon Simple Queue Service (SQS) 是一项快速可靠、可扩展且完全托管的消息队列服务。SQS 使得云应用程序的组件去耦合大大简化,并且具有较高的成本效益。您可以使用 SQS 来传输任何容量的数据,使用任意的吞吐量,而不会丢失消息或要求其他服务永久可用。
AWS SQS的主要作用是把生产消息的应用程序和消费消息的应用程序解耦,起到中间缓存的作用,避免直接依赖。应用场景如:消息的生产速度大于消息的消费速度;消息的生产者和消息的消费者之间的网络通信不能保证一直非常可靠。
AWS SQS的特性约束:
消息内容不超过256KB。
消息在队列中最多保留14天
不保证消息的顺序,即不保证先进先出。

Apache Camel简介
camel首先是一个规则引擎。其次才是一个开源项目。
Apache Camel是Apache基金会下的一个开源项目,它是一个基于规则路由和中介引擎,提供企业集成模式的Java对象的实现,通过应用程序接口(或称为陈述式的Java领域特定语言(DSL))来配置路由和中介的规则。领域特定语言意味着Apache Camel支持你在的集成开发工具中使用平常的,类型安全的,可自动补全的Java代码来编写路由规则,而不需要大量的XML配置文件。同时,也支持在Spring中使用XML配置定义路由和中介规则。
Camel提供的基于规则的路由(Routing)引擎,可以使用Camel定义的DSL语言,方便的定义出各种Routing。
如下例:
from(“file://xxxx").to("activemq://xxxx") 将某文件,读入并写入到ActiveMQ的JMS中

1、先在pom中引入SQS的依赖jar包和 camel-aws和camel-spring 配置

<camel.version>2.18.0</camel.version>
<aws-java-sdk.version>1.11.18</aws-java-sdk.version>
<jackson.version>2.8.4</jackson.version>
<!-- camel -->
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-core</artifactId>
			<version>${camel.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-stream</artifactId>
			<version>${camel.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.camel</groupId>
		    <artifactId>camel-aws</artifactId>
		    <version>${camel.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-spring</artifactId>
			<version>${camel.version}</version>
		</dependency>

<!-- AWS SQS -->
		<dependency>
	                <groupId>com.amazonaws</groupId>
	      	        <artifactId>aws-java-sdk-sqs</artifactId>
	                <version>${aws-java-sdk.version}</version>
	        </dependency>
		<!-- AWS SQS end -->
		
		<!-- JackSon -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<!-- JackSon end -->


2、Spring配置文件中配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    
	<bean id="myBuilder" class="com.test.server.camel.MyBuilder"/>
	<bean id="credentials" class="com.amazonaws.auth.BasicAWSCredentials">
		<!-- AWS 秘钥 -->
		<constructor-arg index="0" value="xxxxxx" />
		<constructor-arg index="1" value="xxxxxx" />
	</bean>
	<!-- AWS SQS 客户端 -->
	<bean id="client" class="com.amazonaws.services.sqs.AmazonSQSClient">
		<constructor-arg index="0" ref="credentials" />
	</bean>
	<!-- SQS队列消费者实例 -->
	<bean id="myconsumer" class="com.test.server.consumer.Myconsumer" />
	<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">  
        <camel:routeBuilder ref="myBuilder"/> 
    </camelContext>      
</beans>

3、MyBuilder接口实现类

package com.test.server.camel;

import org.apache.camel.builder.RouteBuilder;

public class MyBuilder extends RouteBuilder {

    
	@Override
	public void configure() throws Exception {
	    
	    from("aws-sqs://MyQueue?amazonSQSClient=#client&maxMessagesPerPoll=5")
		.to("bean:myconsumer?method=receiveMessage")
	    .end();
	}
	
}


4、接收消息的实现类

package com.test.server.consumer;

public class Myconsumer  {

	public void receiveMessage(String message) {
		System.out.pritln("receiveMsg=" + message);
		// TODO
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值