|
@@ -1,3 +1,4 @@
|
|
|
|
|
+/*
|
|
|
package com.usoftchina.saas.transfers.service;
|
|
package com.usoftchina.saas.transfers.service;
|
|
|
|
|
|
|
|
import com.rabbitmq.client.AMQP;
|
|
import com.rabbitmq.client.AMQP;
|
|
@@ -24,11 +25,13 @@ import java.io.IOException;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
+*/
|
|
|
/**
|
|
/**
|
|
|
* @Description RabbitMq 消息接收处理基类
|
|
* @Description RabbitMq 消息接收处理基类
|
|
|
* @Author chenwei
|
|
* @Author chenwei
|
|
|
* @Date 2018/12/27
|
|
* @Date 2018/12/27
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
public abstract class BaseRabbitReceiveService implements ChannelAwareMessageListener {
|
|
public abstract class BaseRabbitReceiveService implements ChannelAwareMessageListener {
|
|
|
|
|
|
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(BaseRabbitReceiveService.class);
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(BaseRabbitReceiveService.class);
|
|
@@ -47,10 +50,12 @@ public abstract class BaseRabbitReceiveService implements ChannelAwareMessageLis
|
|
|
protected int requestedHeartBeat = 30;
|
|
protected int requestedHeartBeat = 30;
|
|
|
protected String delayQueueName;
|
|
protected String delayQueueName;
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 初始化连接
|
|
* 初始化连接
|
|
|
* @return
|
|
* @return
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
private ConnectionFactory initConnectionFactory(){
|
|
private ConnectionFactory initConnectionFactory(){
|
|
|
if (StringUtils.isEmpty(host)) {
|
|
if (StringUtils.isEmpty(host)) {
|
|
|
throw new IllegalArgumentException("host为空");
|
|
throw new IllegalArgumentException("host为空");
|
|
@@ -77,10 +82,12 @@ public abstract class BaseRabbitReceiveService implements ChannelAwareMessageLis
|
|
|
return connectionFactory;
|
|
return connectionFactory;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 动态创建消息监听
|
|
* 动态创建消息监听
|
|
|
* @return
|
|
* @return
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
@Bean
|
|
@Bean
|
|
|
protected SimpleMessageListenerContainer simpleMessageListenerContainer(){
|
|
protected SimpleMessageListenerContainer simpleMessageListenerContainer(){
|
|
|
if (!isDynamicCreate){
|
|
if (!isDynamicCreate){
|
|
@@ -110,24 +117,28 @@ public abstract class BaseRabbitReceiveService implements ChannelAwareMessageLis
|
|
|
processMessage(messageJson, channel, tag, queueName);
|
|
processMessage(messageJson, channel, tag, queueName);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 接收消息处理
|
|
* 接收消息处理
|
|
|
* @param messageBytes
|
|
* @param messageBytes
|
|
|
* @param channel
|
|
* @param channel
|
|
|
* @param headers
|
|
* @param headers
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
@RabbitHandler
|
|
@RabbitHandler
|
|
|
public void receiveMessage(byte[] messageBytes, Channel channel, @Headers Map<String, Object> headers) {
|
|
public void receiveMessage(byte[] messageBytes, Channel channel, @Headers Map<String, Object> headers) {
|
|
|
receiveMessage(new String(messageBytes), channel, headers);
|
|
receiveMessage(new String(messageBytes), channel, headers);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 接收消息处理
|
|
* 接收消息处理
|
|
|
*
|
|
*
|
|
|
* @param messageJson
|
|
* @param messageJson
|
|
|
* @param channel
|
|
* @param channel
|
|
|
* @param headers
|
|
* @param headers
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
@RabbitHandler
|
|
@RabbitHandler
|
|
|
public void receiveMessage(String messageJson, Channel channel, @Headers Map<String, Object> headers) {
|
|
public void receiveMessage(String messageJson, Channel channel, @Headers Map<String, Object> headers) {
|
|
|
long tag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
|
|
long tag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
|
|
@@ -135,13 +146,15 @@ public abstract class BaseRabbitReceiveService implements ChannelAwareMessageLis
|
|
|
processMessage(messageJson, channel, tag, queueName);
|
|
processMessage(messageJson, channel, tag, queueName);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 处理消息
|
|
* 处理消息
|
|
|
* @param messageJson
|
|
* @param messageJson
|
|
|
* @param channel
|
|
* @param channel
|
|
|
* @param tag
|
|
* @param tag
|
|
|
* @param queueName
|
|
* @param queueName
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
private void processMessage(String messageJson, Channel channel, long tag, String queueName) {
|
|
private void processMessage(String messageJson, Channel channel, long tag, String queueName) {
|
|
|
MessageInfo messageInfo = getMessageInfo(messageJson);
|
|
MessageInfo messageInfo = getMessageInfo(messageJson);
|
|
|
//当消息不符合格式MessageInfo格式时,丢弃消息
|
|
//当消息不符合格式MessageInfo格式时,丢弃消息
|
|
@@ -164,11 +177,13 @@ public abstract class BaseRabbitReceiveService implements ChannelAwareMessageLis
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 获取消息内容
|
|
* 获取消息内容
|
|
|
* @param messageJson
|
|
* @param messageJson
|
|
|
* @return
|
|
* @return
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
private MessageInfo getMessageInfo(String messageJson) {
|
|
private MessageInfo getMessageInfo(String messageJson) {
|
|
|
MessageInfo messageInfo = null;
|
|
MessageInfo messageInfo = null;
|
|
|
try {
|
|
try {
|
|
@@ -180,15 +195,18 @@ public abstract class BaseRabbitReceiveService implements ChannelAwareMessageLis
|
|
|
return messageInfo;
|
|
return messageInfo;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 发送延时消息
|
|
* 发送延时消息
|
|
|
* @param messageInfo
|
|
* @param messageInfo
|
|
|
* @param channel
|
|
* @param channel
|
|
|
* @param queueName
|
|
* @param queueName
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
private void sendDelayMessage(MessageInfo messageInfo, Channel channel, String queueName) {
|
|
private void sendDelayMessage(MessageInfo messageInfo, Channel channel, String queueName) {
|
|
|
//重试次数+1
|
|
//重试次数+1
|
|
|
- /*messageInfo.setRetryCount(messageInfo.getRetryCount() + 1);
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/*messageInfo.setRetryCount(messageInfo.getRetryCount() + 1);
|
|
|
String messageJson = JsonUtils.toJsonString(messageInfo);
|
|
String messageJson = JsonUtils.toJsonString(messageInfo);
|
|
|
try {
|
|
try {
|
|
|
String dQueueName = getDelayQueueName(channel, queueName);
|
|
String dQueueName = getDelayQueueName(channel, queueName);
|
|
@@ -199,16 +217,19 @@ public abstract class BaseRabbitReceiveService implements ChannelAwareMessageLis
|
|
|
LOGGER.info("发送延时消息[BaseRabbitReceiveService.sendDelayMessage].正常,messageJson:{},queueName:{}", messageJson, queueName);
|
|
LOGGER.info("发送延时消息[BaseRabbitReceiveService.sendDelayMessage].正常,messageJson:{},queueName:{}", messageJson, queueName);
|
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|
|
|
LOGGER.error("发送延时消息[BaseRabbitReceiveService.sendDelayMessage].异常,messageJson:{},queueName:{}", messageJson, queueName, e);
|
|
LOGGER.error("发送延时消息[BaseRabbitReceiveService.sendDelayMessage].异常,messageJson:{},queueName:{}", messageJson, queueName, e);
|
|
|
- }*/
|
|
|
|
|
|
|
+ }*//*
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 获取延时队列
|
|
* 获取延时队列
|
|
|
* @param channel
|
|
* @param channel
|
|
|
* @param queueName
|
|
* @param queueName
|
|
|
* @return
|
|
* @return
|
|
|
* @throws IOException
|
|
* @throws IOException
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
private String getDelayQueueName(Channel channel, String queueName) throws IOException {
|
|
private String getDelayQueueName(Channel channel, String queueName) throws IOException {
|
|
|
if (!StringUtils.isEmpty(delayQueueName)) {
|
|
if (!StringUtils.isEmpty(delayQueueName)) {
|
|
|
return delayQueueName;
|
|
return delayQueueName;
|
|
@@ -223,11 +244,13 @@ public abstract class BaseRabbitReceiveService implements ChannelAwareMessageLis
|
|
|
return dQueueName;
|
|
return dQueueName;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 消息应答No
|
|
* 消息应答No
|
|
|
* @param channel
|
|
* @param channel
|
|
|
* @param tag
|
|
* @param tag
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
private void basicNack(Channel channel, long tag) {
|
|
private void basicNack(Channel channel, long tag) {
|
|
|
try {
|
|
try {
|
|
|
channel.basicNack(tag, false, false);
|
|
channel.basicNack(tag, false, false);
|
|
@@ -237,11 +260,13 @@ public abstract class BaseRabbitReceiveService implements ChannelAwareMessageLis
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 消息应答Yes
|
|
* 消息应答Yes
|
|
|
* @param channel
|
|
* @param channel
|
|
|
* @param tag
|
|
* @param tag
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
private void basicAck(Channel channel, long tag) {
|
|
private void basicAck(Channel channel, long tag) {
|
|
|
try {
|
|
try {
|
|
|
channel.basicAck(tag, false);
|
|
channel.basicAck(tag, false);
|
|
@@ -251,11 +276,14 @@ public abstract class BaseRabbitReceiveService implements ChannelAwareMessageLis
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
|
|
+ */
|
|
|
|
|
+/**
|
|
|
* 处理消息
|
|
* 处理消息
|
|
|
* @param messageInfo
|
|
* @param messageInfo
|
|
|
* @throws Exception
|
|
* @throws Exception
|
|
|
- */
|
|
|
|
|
|
|
+ *//*
|
|
|
|
|
+
|
|
|
public abstract void processMessage(MessageInfo messageInfo) throws Exception;
|
|
public abstract void processMessage(MessageInfo messageInfo) throws Exception;
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+*/
|