使用spring boot spring jms管理aws sqs 收发消息,简单使用
maven 导入
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sqs</artifactId>
<version>1.11.210</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>amazon-sqs-java-messaging-lib</artifactId>
<version>1.0.4</version>
</dependency>
config配置
import com.amazon.sqs.javamessaging.ProviderConfiguration;
import com.amazon.sqs.javamessaging.SQSConnectionFactory;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.support.destination.DynamicDestinationResolver;
import javax.jms.Session;
/**
* <p>
* </p>
*
* @author jerry.li
* @version 0.1 2017年10月24
*/
@Configuration
@EnableJms
public class JmsConfig {
@Value("${aws.accessKey}")
private String accessKey;
@Value("${aws.secretKey}")
private String secretKey;
SQSConnectionFactory connectionFactory = null;
public SQSConnectionFactory getConnectionFactory() {
if (connectionFactory != null) {
return connectionFactory;
}
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setConnectionTimeout(3000);
clientConfiguration.setProtocol(Protocol.HTTP);
clientConfiguration.useGzip();
clientConfiguration.useTcpKeepAlive();
AmazonSQSClientBuilder amazonSQSClientBuilder = AmazonSQSClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.withClientConfiguration(clientConfiguration)
.withRegion(Regions.CN_NORTH_1);
connectionFactory = new SQSConnectionFactory(new ProviderConfiguration(), amazonSQSClientBuilder);
return connectionFactory;
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(this.getConnectionFactory());
factory.setDestinationResolver(new DynamicDestinationResolver());
factory.setConcurrency("3-10");
factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
factory.setSessionTransacted(false);
return factory;
}
@Bean
public JmsTemplate defaultJmsTemplate() {
return new JmsTemplate(this.getConnectionFactory());
}
}
service使用
import com.amazon.sqs.javamessaging.message.SQSTextMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
import javax.jms.JMSException;
import javax.jms.Message;
/**
* <p>
* </p>
*
* @author jerry.li
* @version 0.1 2017年10月24
*/
@Service
public class JmsListenerService {
@Autowired
private JmsTemplate jmsTemplate;
/**
* 发送消息
* @param message
*/
public void oeSend(String message) {
jmsTemplate.convertAndSend("oe", message);
}
/**
* 接收消息
* destination oe 队列名称
* @param message
* @throws JMSException
* 我只创建了一个listenerFactory 这里会默认使用那一个,如果有多个Factory 需要手动指定
*/
@JmsListener(destination = "oe")
public void oeListener(Message message) throws JMSException {
SQSTextMessage textMessage = (SQSTextMessage) message;
System.out.println("oe收到一条消息" + textMessage.getText());
message.acknowledge();
}
}