Java DrugProducer 服务类:使用 RocketMQ 发送药品信息变更消息
这段代码是一个名为 'DrugProducer' 的服务类,用于发送药品信息更改的消息。它依赖于一个名为 'DrugSource' 的消息发送器。
在 sendDrugChangeMsg 方法中,它创建了一个消息对象,并使用消息构建器设置了消息的负载、属性键和标签。然后,它调用 drugChangeSource 的 drugChangeOutput 方法发送消息,并返回发送结果。
方法上使用了 @Transactional 注解,表示该方法需要在一个事务中执行。这样,在方法执行期间发生的数据库操作将在事务提交之前被缓存在内存中,直到事务被提交后才会被持久化到数据库中。
可以使用 TransactionTemplate 或 PlatformTransactionManager 来提交事务。这样,在事务提交之前,RocketMQ 将不会消费消息内容。
重要性:使用事务管理器是确保消息发送和消费的一致性的重要步骤。如果没有使用事务管理器,RocketMQ 将无法消费消息。因为在事务提交之前,消息发送的结果可能会被回滚,而 RocketMQ 只有在消息被成功发送后才会进行消费。
代码示例:
@Service
public class DrugProducer {
/**
* 发送药品信息更改的消息
*/
@Resource
private DrugSource drugChangeSource;
private static final String DRUG_CHANGE_TAG = 'drugChange';
@Transactional
public Boolean sendDrugChangeMsg(DrugChangeMessage message) {
Message<DrugChangeMessage> msg = MessageBuilder.
withPayload(message).
setHeader(MessageConst.PROPERTY_KEYS, message.getDrugId()).
setHeader(MessageConst.PROPERTY_TAGS, DRUG_CHANGE_TAG).
build();
return drugChangeSource.drugChangeOutput().send(msg);
}
}
原文地址: https://www.cveoy.top/t/topic/pczn 著作权归作者所有。请勿转载和采集!