|
|
|
@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.bnyer.common.core.domain.OrderMqMessageRecord; |
|
|
|
import com.bnyer.common.core.enums.EnumMessageStatus; |
|
|
|
import com.bnyer.common.core.utils.bean.EntityConvertUtil; |
|
|
|
import com.bnyer.common.core.utils.uuid.IdUtils; |
|
|
|
import com.bnyer.common.rocketmq.constant.RocketMqConstant; |
|
|
|
import com.bnyer.common.rocketmq.constant.RocketMqTopic; |
|
|
|
@ -17,6 +16,7 @@ import org.apache.rocketmq.client.producer.SendCallback; |
|
|
|
import org.apache.rocketmq.client.producer.SendResult; |
|
|
|
import org.apache.rocketmq.spring.core.RocketMQTemplate; |
|
|
|
import org.apache.rocketmq.spring.support.RocketMQHeaders; |
|
|
|
import org.jetbrains.annotations.NotNull; |
|
|
|
import org.springframework.core.env.Environment; |
|
|
|
import org.springframework.messaging.Message; |
|
|
|
import org.springframework.messaging.support.MessageBuilder; |
|
|
|
@ -52,6 +52,28 @@ public class OrderMqMessageRecordServiceImpl implements OrderMqMessageRecordServ |
|
|
|
this.applicationName = env.getProperty("spring.application.name"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 构建消息内容 |
|
|
|
* @param topic |
|
|
|
* @param tag |
|
|
|
* @param message |
|
|
|
* @return |
|
|
|
* @param <T> |
|
|
|
*/ |
|
|
|
@NotNull |
|
|
|
private <T> MqRecordMessage getMqRecordMessage(String topic, String tag, T message) { |
|
|
|
String buildTopic = rocketMQEnhanceTemplate.reBuildTopic(topic); |
|
|
|
MqRecordMessage mqRecordMessage = new MqRecordMessage(); |
|
|
|
mqRecordMessage.setTopic(buildTopic); |
|
|
|
mqRecordMessage.setTag(tag); |
|
|
|
mqRecordMessage.setConsumerGroupName(buildTopic); |
|
|
|
mqRecordMessage.setMessageKey(IdUtils.randomUUID()); |
|
|
|
mqRecordMessage.setContent(JSON.toJSONString(message)); |
|
|
|
mqRecordMessage.setSource(applicationName); |
|
|
|
mqRecordMessage.setReturnTopic(RocketMqTopic.ORDER_RETURN_MSG_TOPIC); |
|
|
|
return mqRecordMessage; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 发送同步步消息 |
|
|
|
* @param topic |
|
|
|
@ -67,18 +89,16 @@ public class OrderMqMessageRecordServiceImpl implements OrderMqMessageRecordServ |
|
|
|
RocketMQTemplate rocketMQTemplate = rocketMQEnhanceTemplate.getTemplate(); |
|
|
|
//保存消息记录
|
|
|
|
log.info("消息发送中,开始入库本地消息记录表"); |
|
|
|
OrderMqMessageRecord orderMqMessageRecord = saveMessageRecord(topic,tag, message); |
|
|
|
MqRecordMessage mqRecordMessage = getMqRecordMessage(topic, tag, message); |
|
|
|
OrderMqMessageRecord orderMqMessageRecord = saveMessageRecord(topic,tag, mqRecordMessage); |
|
|
|
//发消息
|
|
|
|
MqRecordMessage mqRecordMessage = EntityConvertUtil.copy(orderMqMessageRecord, MqRecordMessage.class); |
|
|
|
mqRecordMessage.setSource(applicationName); |
|
|
|
mqRecordMessage.setReturnTopic(RocketMqTopic.ORDER_RETURN_MSG_TOPIC); |
|
|
|
Message<MqRecordMessage> sendMessage = MessageBuilder.withPayload(mqRecordMessage).setHeader(RocketMQHeaders.KEYS, orderMqMessageRecord.getMessageKey()).build(); |
|
|
|
Message<MqRecordMessage> sendMessage = MessageBuilder.withPayload(mqRecordMessage).setHeader(RocketMQHeaders.KEYS, mqRecordMessage.getMessageKey()).build(); |
|
|
|
SendResult sendResult; |
|
|
|
try { |
|
|
|
sendResult = rocketMQTemplate.syncSend(rocketMQEnhanceTemplate.buildDestination(topic,tag), sendMessage); |
|
|
|
log.info("topic:[{}]tag:[{}]同步消息[{}]发送结果[{}]", topic,tag, JSONObject.toJSON(message), JSONObject.toJSON(sendResult)); |
|
|
|
log.info("topic:[{}]tag:[{}]同步消息[{}]发送结果[{}]", mqRecordMessage.getTopic(),tag, JSONObject.toJSON(mqRecordMessage), JSONObject.toJSON(sendResult)); |
|
|
|
} catch (Exception e) { |
|
|
|
log.info("topic:[{}]tag:[{}]同步消息[{}]发送结果[{}]", topic,tag, JSONObject.toJSON(message), e.getMessage()); |
|
|
|
log.info("topic:[{}]tag:[{}]同步消息[{}]发送结果[{}]", mqRecordMessage.getTopic(),tag, JSONObject.toJSON(mqRecordMessage), e.getMessage()); |
|
|
|
log.info("消息发送失败,更新消息记录,等待定时任务进行消息补偿"); |
|
|
|
editMessageRecordStatus(orderMqMessageRecord.getId(), orderMqMessageRecord.getStatus(),e.getMessage()); |
|
|
|
// throw new RuntimeException(e);
|
|
|
|
@ -95,19 +115,18 @@ public class OrderMqMessageRecordServiceImpl implements OrderMqMessageRecordServ |
|
|
|
RocketMQTemplate rocketMQTemplate = rocketMQEnhanceTemplate.getTemplate(); |
|
|
|
//保存消息记录
|
|
|
|
log.info("消息发送中,开始入库本地消息记录表"); |
|
|
|
OrderMqMessageRecord orderMqMessageRecord = saveMessageRecord(topic,tag, message); |
|
|
|
MqRecordMessage mqRecordMessage = getMqRecordMessage(topic, tag, message); |
|
|
|
OrderMqMessageRecord orderMqMessageRecord = saveMessageRecord(topic,tag, mqRecordMessage); |
|
|
|
mqRecordMessage.setId(orderMqMessageRecord.getId()); |
|
|
|
//发消息
|
|
|
|
MqRecordMessage mqRecordMessage = EntityConvertUtil.copy(orderMqMessageRecord, MqRecordMessage.class); |
|
|
|
mqRecordMessage.setSource(applicationName); |
|
|
|
mqRecordMessage.setReturnTopic(RocketMqTopic.ORDER_RETURN_MSG_TOPIC); |
|
|
|
rocketMQTemplate.asyncSend(rocketMQEnhanceTemplate.buildDestination(topic,tag), MessageBuilder.withPayload(mqRecordMessage).build(), new SendCallback() { |
|
|
|
@Override |
|
|
|
public void onSuccess(SendResult sendResult) { |
|
|
|
log.info("消息发送成功,topic:{},tag:{},message:{},result:{}",topic,tag,JSON.toJSONString(message), JSON.toJSONString(sendResult)); |
|
|
|
log.info("消息发送成功,topic:{},tag:{},message:{},result:{}",mqRecordMessage.getTopic(),tag,JSON.toJSONString(mqRecordMessage), JSON.toJSONString(sendResult)); |
|
|
|
} |
|
|
|
@Override |
|
|
|
public void onException(Throwable throwable) { |
|
|
|
log.error("消息发送失败,topic:{},tag:{},message:{},error:{}",topic,tag,JSON.toJSONString(message),throwable.getMessage()); |
|
|
|
log.error("消息发送失败,topic:{},tag:{},message:{},error:{}",mqRecordMessage.getTopic(),tag,JSON.toJSONString(mqRecordMessage),throwable.getMessage()); |
|
|
|
log.info("消息发送失败,更新消息记录,等待定时任务进行消息补偿"); |
|
|
|
editMessageRecordStatus(orderMqMessageRecord.getId(),orderMqMessageRecord.getStatus(),throwable.getMessage()); |
|
|
|
} |
|
|
|
@ -124,19 +143,18 @@ public class OrderMqMessageRecordServiceImpl implements OrderMqMessageRecordServ |
|
|
|
RocketMQTemplate rocketMQTemplate = rocketMQEnhanceTemplate.getTemplate(); |
|
|
|
//保存消息记录
|
|
|
|
log.info("消息发送中,开始入库本地消息记录表"); |
|
|
|
OrderMqMessageRecord orderMqMessageRecord = saveMessageRecord(topic,tag, message); |
|
|
|
MqRecordMessage mqRecordMessage = getMqRecordMessage(topic, tag, message); |
|
|
|
OrderMqMessageRecord orderMqMessageRecord = saveMessageRecord(topic,tag, mqRecordMessage); |
|
|
|
mqRecordMessage.setId(orderMqMessageRecord.getId()); |
|
|
|
//发消息
|
|
|
|
MqRecordMessage mqRecordMessage = EntityConvertUtil.copy(orderMqMessageRecord, MqRecordMessage.class); |
|
|
|
mqRecordMessage.setSource(applicationName); |
|
|
|
mqRecordMessage.setReturnTopic(RocketMqTopic.ORDER_RETURN_MSG_TOPIC); |
|
|
|
rocketMQTemplate.asyncSend(rocketMQEnhanceTemplate.buildDestination(topic,tag), MessageBuilder.withPayload(mqRecordMessage).build(), new SendCallback() { |
|
|
|
@Override |
|
|
|
public void onSuccess(SendResult sendResult) { |
|
|
|
log.info("消息发送成功,topic:{},tag:{},message:{},result:{}",topic,tag,JSON.toJSONString(message),JSON.toJSONString(sendResult)); |
|
|
|
log.info("消息发送成功,topic:{},tag:{},message:{},result:{}",mqRecordMessage.getTopic(),tag,JSON.toJSONString(mqRecordMessage),JSON.toJSONString(sendResult)); |
|
|
|
} |
|
|
|
@Override |
|
|
|
public void onException(Throwable throwable) { |
|
|
|
log.error("消息发送失败,topic:{},tag:{},message:{},error:{}",topic,tag,JSON.toJSONString(message),throwable.getMessage()); |
|
|
|
log.error("消息发送失败,topic:{},tag:{},message:{},error:{}",mqRecordMessage.getTopic(),tag,JSON.toJSONString(mqRecordMessage),throwable.getMessage()); |
|
|
|
log.info("消息发送失败,更新消息记录,等待定时任务进行消息补偿"); |
|
|
|
editMessageRecordStatus(orderMqMessageRecord.getId(),orderMqMessageRecord.getStatus(),throwable.getMessage()); |
|
|
|
} |
|
|
|
@ -149,8 +167,7 @@ public class OrderMqMessageRecordServiceImpl implements OrderMqMessageRecordServ |
|
|
|
* @param <T> |
|
|
|
*/ |
|
|
|
@Transactional |
|
|
|
public <T> OrderMqMessageRecord saveMessageRecord(String topic, String tag, T message){ |
|
|
|
topic = rocketMQEnhanceTemplate.reBuildTopic(topic); |
|
|
|
public OrderMqMessageRecord saveMessageRecord(String topic, String tag, MqRecordMessage message){ |
|
|
|
OrderMqMessageRecord orderMqMessageRecord = new OrderMqMessageRecord(); |
|
|
|
orderMqMessageRecord.setStatus(EnumMessageStatus.PROCESS); |
|
|
|
orderMqMessageRecord.setConsumerGroupName(topic); |
|
|
|
|