java中 kafka简单应用

复制代码
1 org.springframework.kafka.core 包

2 调用地方

复制代码
@Autowired
@Qualifier("kafkaMessageServiceImpl")
private MessageService messageService;
复制代码
MessageSendLog messageSendLog = getMessageSendLog(subject, content, taskSubQuery.getTaskExeId(), info.getUserId(), taskExeName, taskConfig.getCreatorId());
messageService.commonPlatform(messageSendLog);

3 原始类

复制代码
@Slf4j
@Service("kafkaMessageServiceImpl")
@ConditionalOnExpression("!'${environment.mode}'.equals('pre')")
public class KafkaMessageServiceImpl implements MessageService {

    @Autowired
    @Qualifier("kafkaTemplateSj")
    private KafkaTemplate<String, Object> kafkaTemplateSj;
复制代码
@Override
public void platform(NotificationParam notificationParam) {
    List<AddMessageDTO> dtoList = conformityMessageDto(notificationParam);
    for (AddMessageDTO dto:dtoList) {
        notificationParam.setReceverid(dto.getReceiver());
        ItemNotificationRecord itemNotificationRecord = TaskItemTranslator.saveTaskItemNotificationRel(notificationParam);
        try {
            kafkaTemplateSj.send(MqConstant.ICWP_MSG_RECEIVE, /*dto.getMessgaeId(),*/ JSON.toJSONString(dto))
                    .addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {
                        @Override
                        public void onFailure(Throwable ex) {
                            if (notificationParam.getFailCallback() != null) {
                                notificationParam.getFailCallback().accept(ex.getMessage());
                            }
                            itemNotificationRecord.setStatus("fail");
                            itemNotificationRecordMapper.insert(itemNotificationRecord);
                            log.error("platform sendKafkaMsg  log : send topic error, msg = {}", ex.getMessage(), ex);
                        }

                        @Override
                        public void onSuccess(SendResult<String, Object> result) {
                            if (notificationParam.getSuccCallback() != null) {
                                notificationParam.getSuccCallback().accept("success");
                            }
                            itemNotificationRecordMapper.insert(itemNotificationRecord);
                            log.info("platform sendKafkaMsg log : send topic success !");
                        }
                    });
        } catch (Exception e) {
            itemNotificationRecord.setStatus("fail");
            itemNotificationRecordMapper.insert(itemNotificationRecord);
            log.error("record cron sendKafkaMsgForChangeEventStatus error!", e);
        }
    }

}
复制代码
@Override
public void commonPlatform(MessageSendLog messageSendLog) {
    List<AddMessageDTO> dtoList = getByAddMessageNewDtOlist(messageSendLog);
    for (AddMessageDTO dto:dtoList) {
        MessageSendLog messageInfo = messageSendLogVo(messageSendLog,dto);
        try {
            kafkaTemplateSj.send(MqConstant.ICWP_MSG_RECEIVE, JSON.toJSONString(dto))
                    .addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {
                        @Override
                        public void onFailure(Throwable ex) {
                            if (messageSendLog.getFailCallback() != null) {
                                messageSendLog.getFailCallback().accept(ex.getMessage());
                            }
                            messageInfo.setStatus("fail");
                            messageSendLogMapper.insert(messageInfo);
                            log.error("platform commonPlatKafkaMsg  log : send topic error, msg = {}", ex.getMessage(), ex);
                        }

                        @Override
                        public void onSuccess(SendResult<String, Object> result) {
                            if (messageSendLog.getSuccCallback() != null) {
                                messageSendLog.getSuccCallback().accept("success");
                            }
                            messageInfo.setStatus("success");
                            messageSendLogMapper.insert(messageInfo);
                            log.info("platform commonPlatKafkaMsg log : send topic success !");
                        }
                    });
        } catch (Exception e) {
            messageInfo.setStatus("fail");
            messageSendLogMapper.insert(messageInfo);
            log.error("record cron commonPlatKafkaMsg error!", e);
        }
    }
}
复制代码
public final static String ICWP_MSG_RECEIVE = "icwp-message-receive";
复制代码
package com.sf.gis.common.entity;

import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDateTime;
import java.util.function.Consumer;

/**
 * <p>
 * 
 * </p>
 *
 * @author xxx
 * @since 2024-04-22
 */
@Getter
@Setter
@TableName("message_send_log")
@ApiModel(value = "MessageSendLog对象", description = "")
public class MessageSendLog {

    @ApiModelProperty("UUID")
    @TableId(value = "message_send_log_id", type = IdType.UUID)
    private String messageSendLogId;

    @ApiModelProperty("消息主题")
    @TableField("subject")
    private String subject;

    @ApiModelProperty("消息来源来源的业务系统(1:数字网格+、2:政法平安、3、事件分拨、 4、决策分析、5、三级工作平台)")
    @TableField("source")
    private Integer source;

    @ApiModelProperty("消息内容")
    @TableField("content")
    private String content;

    @ApiModelProperty("消息类型(0 普通、1 预警、2 待办、 3 公告) 5 领导批示 6 领导关注")
    @TableField("type")
    private Integer type;

    @ApiModelProperty("链接地址支持跳转到业务系统的详 情地址")
    @TableField("link")
    private String link;

    @ApiModelProperty("移动端链接地址")
    @TableField("mobile_link")
    private String mobileLink;

    @ApiModelProperty("消息等级(0 一般、1 紧急)")
    @TableField("priority")
    private Integer priority;

    @ApiModelProperty("发起人 ID")
    @TableField("creator")
    private String creator;

    @ApiModelProperty("接收者(根据 receiverType 来传参) 到人:用户 ID 到部门:部门 Code 到角色:角色 Code ")
    @TableField("receiver")
    private String receiver;

    @ApiModelProperty("接收者类型 0 到人、1 到部门、2 到 角色(默认 0)")
    @TableField("receiver_type")
    private Integer receiverType;

    @ApiModelProperty("业务类型code")
    @TableField("bus_code")
    private String busCode;

    @ApiModelProperty("环节状态名称")
    @TableField("link_state_name")
    private String linkStateName;

    @ApiModelProperty("消息发送状态")
    @TableField("status")
    private String status;

    @ApiModelProperty("流水号")
    @TableField("rel_id")
    private String relId;


    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;


    /**
     * 失败回调
     */
    @TableField(exist = false)
    private Consumer<String> failCallback;

    /**
     * 成功回调
     */
    @TableField(exist = false)
    private Consumer<String> succCallback;

}
相关推荐
wuminyu1 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
万粉变现经纪人1 小时前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
清风明月一壶酒1 小时前
OpenClaw自动处理Word文档全流程
开发语言·c#·word
其实防守也摸鱼2 小时前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
callJJ3 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
小郑加油3 小时前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦3 小时前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
KuaCpp3 小时前
C++面向对象(速过复习版)
开发语言·c++
wbs_scy3 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
2zcode3 小时前
基于MATLAB元胞自动机(CA)的AZ80A镁合金动态再结晶(DRX)过程模拟
开发语言·matlab·动态再结晶