|
|
|
@ -1,6 +1,7 @@ |
|
|
|
package com.bnyer.order.service.impl; |
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.bnyer.common.core.constant.ServiceNameConstants; |
|
|
|
import com.bnyer.common.core.domain.OrderMqMessageRecord; |
|
|
|
import com.bnyer.common.core.enums.EnumMessageStatus; |
|
|
|
@ -14,6 +15,8 @@ import lombok.extern.slf4j.Slf4j; |
|
|
|
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.springframework.messaging.Message; |
|
|
|
import org.springframework.messaging.support.MessageBuilder; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
@ -41,6 +44,38 @@ public class OrderMqMessageRecordServiceImpl implements OrderMqMessageRecordServ |
|
|
|
@Resource |
|
|
|
private OrderMqMessageRecordMapper orderMqMessageRecordMapper; |
|
|
|
|
|
|
|
/** |
|
|
|
* 发送同步步消息 |
|
|
|
* @param topic |
|
|
|
* @param tag |
|
|
|
* @param message |
|
|
|
* @param <T> |
|
|
|
*/ |
|
|
|
@Transactional |
|
|
|
@Override |
|
|
|
public <T> void send(String topic, String tag, T message) { |
|
|
|
// 设置业务键,此处根据公共的参数进行处理
|
|
|
|
// 更多的其它基础业务处理...
|
|
|
|
RocketMQTemplate rocketMQTemplate = rocketMQEnhanceTemplate.getTemplate(); |
|
|
|
//保存消息记录
|
|
|
|
log.info("消息发送中,开始入库本地消息记录表"); |
|
|
|
OrderMqMessageRecord orderMqMessageRecord = saveMessageRecord(topic,tag, message); |
|
|
|
//发消息
|
|
|
|
OrderMqLocalRecordMessage mqLocalMessage = EntityConvertUtil.copy(orderMqMessageRecord, OrderMqLocalRecordMessage.class); |
|
|
|
mqLocalMessage.setSource(ServiceNameConstants.ORDER_SERVICE); |
|
|
|
Message<OrderMqLocalRecordMessage> sendMessage = MessageBuilder.withPayload(mqLocalMessage).setHeader(RocketMQHeaders.KEYS, orderMqMessageRecord.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)); |
|
|
|
} catch (Exception e) { |
|
|
|
editMessageRecordStatus(orderMqMessageRecord.getId(), orderMqMessageRecord.getStatus(),e.getMessage()); |
|
|
|
log.info("topic:[{}]tag:[{}]同步消息[{}]发送结果[{}]", topic,tag, JSONObject.toJSON(message), e.getMessage()); |
|
|
|
log.info("消息发送失败,更新消息记录,等待定时任务进行消息补偿"); |
|
|
|
// throw new RuntimeException(e);
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 发送异步消息(通过线程池执行发送到broker的消息任务,执行完后回调:在SendCallback中可处理相关成功失败时的逻辑) |
|
|
|
* (适合对响应时间敏感的业务场景) |
|
|
|
|