在项目不可避免的使用到消息的推送,总结kafka推送消息:(总结生产消息,消费消息暂无)
本例子在handler层进行推送消息:
a.引入引来:(参考)
org.apache.kafka
kafka_2.12
1.1.1
b.接口中注入: (本例在handler中注入)
@Autowired
KafkaProducer c;
c. 运用kafkaProducer,调用send方法推送消息(handler中进行推送消息)
kafkaProducer.send(new ProducerRecord
1.service层:
@RestController
@RequestMapping("/rule")
public class RuleService {
@Autowired
private RuleHandler handler;
@GetMapping(path = "collideReminder")
public Response collideReminder(@ApiParam("设备识别号") @RequestParam(name = "imei") String imei,
@ApiParam(value = "碰撞等级") @RequestParam(value = "collideLevel") Integer collideLevel) {
return handler.collideReminder(imei, collideLevel);
}
}
2.handler层:
@Component
public class RuleHandler {
private static final Logger logger = LoggerFactory.getLogger(RuleHandler.class);
public static final String RESCUE_MSG = "您的车辆当前发生故障,请确认是否进行援助";
@Autowired
private RuleDao ruleDao;
@Autowired
private MessageDao messageDao;
@Autowired
Properties properties;
@Autowired
KafkaProducer kafkaProducer; //注入KafkaProducer
public Response collideReminder(String imei, Integer collideLevel) {
当碰撞等级为1级和2级时,将推送碰撞提醒
if (collideLevel == 1 || collideLevel == 2) {
String messageContent = "您的车辆当前发生" + collideLevel + "碰撞等级碰撞,请关注您的爱车状态";
//2.向kafka推送消息
logger.debug("kafka send message:" + messageContent + " to topic is collide_Reminder");
kafkaProducer.send(new ProducerRecord("collide_Reminder", messageContent));
logger.debug("kafka send to topic is collide_Reminder success.");
//3.向数据库中保存消息内容
Message message = new Message();
message.setImei(imei);
message.setMessageType(5);
message.setMessageContent(messageContent);
message.setIsRead(0);
message.setIsUsed(0);
message.setIsDel(0);
messageDao.insertMessage(message);
}
return Response.success();
}
}
3.dao层:
public interface MessageDao extends Mapper {
/***
* 单条数据插入
* @param object
* @return
*/
int insertMessage(Message message);
}
4.MessageDao.xml:
//Message实体类
INSERT INTO srm_message
id,
imei,
message_type,
message_content,
small_type,
is_read,
is_del,
is_used,
use_time,
create_time,
update_time
VALUES ( #{id},
#{imei},
#{messageType},
#{messageContent},
#{isRead},
#{isDel},
#{isUsed},
#{useTime},
#{createTime},
#{updateTime}
)
5.Message实体类:
@Data
@Table(name = "message")
public class Message {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "imei")
private String imei;
@Column(name = "message_type")
private Integer messageType;
@Column(name = "small_type")
private Integer smallType;
@Column(name = "message_content")
private String messageContent;
@Column(name = "is_read")
private Integer isRead;
@Column(name = "is_used")
private Integer isUsed;
@Column(name = "use_time")
private Date useTime;
@Column(name = "is_del")
private Integer isDel;
@Column(name = "create_time")
private Date createTime;
@Column(name = "update_time")
private Date updateTime;
}
CREATE TABLE `message` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`activity_id` bigint(20) DEFAULT NULL COMMENT '活动id',
`vin` varchar(20) DEFAULT NULL COMMENT 'vin码',
`imei` varchar(20) DEFAULT NULL COMMENT '设备号',
`message_type` int(11) DEFAULT NULL COMMENT '消息类型1:系统提醒、2:碰撞提醒、3:报警提醒、4:加油提醒',
`small_type` int(11) DEFAULT NULL COMMENT '1.长距离、2.恶劣天气',
`message_content` varchar(255) DEFAULT NULL COMMENT '消息内容',
`is_read` int(11) DEFAULT '0' COMMENT '是否已读0:未读、1:已读、2:已处理',
`is_used` int(11) DEFAULT '0' COMMENT '是否启用0:未启用、1:启用',
`use_time` timestamp NULL DEFAULT NULL COMMENT '启用时间',
`is_del` int(11) DEFAULT '0' COMMENT '删除标识 0:未删除、1:已删除',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
KEY `pk_idx_type` (`message_type`,`is_read`) USING BTREE,
KEY `pk_idx_imei` (`imei`) USING BTREE,
KEY `pk_idx_time` (`create_time`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=43868 DEFAULT CHARSET=utf8 COMMENT='消息表';