您的位置:首页 > 编程语言 > Java开发

spring boot spring JMS AWS SQS MQ

2017-10-25 00:00 1026 查看
使用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.JMSExc
3ff0
eption;
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息