Java Generate/Merge Files(4)Spring and AWS SQS

本文介绍如何利用Spring框架和AWS SQS实现消息发送与接收的功能。通过配置依赖项、设置JMS Configuration以及使用MessageDriven Bean,实现了消息的发布与订阅。文章提供了具体的代码示例与配置文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java Generate/Merge Files(4)Spring and AWS SQS

Dependencies
<!-- AWS Connections -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.113</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sqs</artifactId>
<version>1.11.113</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>amazon-sqs-java-messaging-lib</artifactId>
<version>1.0.1</version>
<exclusions>
<exclusion>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sqs</artifactId>
</exclusion>
</exclusions>
</dependency>

How to use JMS Configuration with Spring to Send message?
<!-- JMS -->

<bean id="credentialsProviderBean" class="com.j2c.feeds2g.services.base.J2CAWSCredentialsProviderChain" />

<bean id="connectionFactoryBuilder"
class="com.amazon.sqs.javamessaging.SQSConnectionFactory$Builder">
<property name="regionName" value="us-east-1" />
<property name="numberOfMessagesToPrefetch" value="10" />
<property name="awsCredentialsProvider" ref="credentialsProviderBean" />
</bean>

<bean id="connectionFactory" class="com.amazon.sqs.javamessaging.SQSConnectionFactory"
factory-bean="connectionFactoryBuilder" factory-method="build" />

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
</bean>

Java MessageServiceImpl to send out the messages
package com.j2c.feeds2g.services;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

import com.j2c.feeds2g.services.base.BaseService;

public class MessageServiceImpl extends BaseService implements MessageService{

private JmsTemplate jmsTemplate;

public void sendJobBucket(String jobBucket) {
jmsTemplate.send("test-jobbucket", new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
final TextMessage msg = session.createTextMessage(jobBucket);
return msg;
}
});
}

public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}

}

In the configuration file, we need to have the key and secret for SQS
aws.accessKeyId=xxxxxx
aws.secretKey=xxxxxx

How to use Message Driven Bean to consume the messages?
<!-- MDB for jobbucket queue -->
<bean id="amazonMessageListener" class="com.j2c.feeds2g.services.mdb.JobBucketMessageDrivenBean">
<property name="actorSystemFactory" ref="actorSystemFactory" />
</bean>

<bean id="messageListener"
class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<property name="delegate" ref="amazonMessageListener" />
<property name="defaultListenerMethod" value="onMessage" />
<property name="messageConverter">
<null />
</property>
</bean>

<bean id="jmsContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destinationName" value="test-jobbucket" />
<property name="messageListener" ref="messageListener" />
</bean>
<!-- MDB end -->

package com.j2c.feeds2g.services.mdb;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;

import com.j2c.feeds2g.services.base.ActorSystemFactory;
import com.j2c.feeds2g.services.base.BaseService;

import akka.actor.ActorSelection;
import akka.actor.ActorSystem;

public class JobBucketMessageDrivenBean extends BaseService{

private ActorSystemFactory actorSystemFactory;

private ActorSelection sourceRouter;

public void onMessage(Message message) {
logger.info("step1 receive information");
if(sourceRouter == null){
ActorSystem system = actorSystemFactory.getActorSystem();
sourceRouter = system.actorSelection("akka://feeds2g/user/sourceRouter");
}

if (message instanceof TextMessage) {
try {
logger.info(String.format("MDB received: %s ", ((TextMessage) message).getText()));
//sourceRouter.tell(null, null);
} catch (JMSException ex) {
throw new RuntimeException(ex);
}
} else {
throw new IllegalArgumentException("Message must be of type TextMessage");
}
}

public void setActorSystemFactory(ActorSystemFactory actorSystemFactory) {
this.actorSystemFactory = actorSystemFactory;
}

}

References:
https://pragmaticintegrator.wordpress.com/2015/04/21/using-aws-sqs-as-jms-provider-with-spring/

https://pragmaticintegrator.wordpress.com/2015/05/05/creating-a-message-driven-bean-with-aws-sqs-in-spring/

https://codingbone.wordpress.com/2010/02/28/how-to-load-properties-files-into-spring-and-expose-to-the-java-classes/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值