使用spring boot spring jms管理aws sqs 收發消息,簡單使用java
maven 導入spring
<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配置maven
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使用ide
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(); } }