Kafka学习笔记——使用Kafka记录APP的操作日志

上一篇文章我们讲到了Kafka的工作原理和如何使用Kafka的代码示例,这里我们开始讲解Kafka的实战,在实际的应用中我们如何使用kafka的。下面将介绍前台的操作日志定时推送到kafka,然后通过kafka将消息日志进行保存,方便大数据的统计分析形成运营报表。
我们先看看工程的目录结构:
这里写图片描述
kafka的版本是:

       <dependency>
          <groupId>org.apache.kafka</groupId>
          <artifactId>kafka_2.10</artifactId>
          <version>0.10.2.0</version>
       </dependency>

下面我们依次看下代码实现:

错误码字典类CodeConstant.java

public class CodeConstant {
    // 参数为空
    public static int NULL_ERROR = -1;

    // 请求参数错误
    public static int PARAM_ERROR = -2;

    // token错误
    public static int TOKEN_ERROR = -3;


}

返回信息实体类JsonMsg.java

public class JsonMsg {
    private int code;

    private String message;
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }


}

kafka消息实体类Message.java

/**
 * kafka消息实体类
 * @author fuyuwei
 * 2017年6月10日 下午10:57:17
 */
public class Message implements Serializable {
   

    private static final long serialVersionUID = -6170235919490993626L;
    /**
     * 消息主键
     */
    protected String messageId;
    /**
     * 回复消息对应的源消息主键
     */
    protected String sourceMessageId;
    /**
     * 发送消息相关信息
     */
    protected String  sender;
    /**
     * 消息体
     */
    protected byte[]  messageBody;
    /**
     * 消息创建时间
     */
    protected long createTime;

    public Message(byte[] messageBody){
        this.sender = getIps();
        createMessageId();
        this.messageBody = messageBody;
        this.createTime = System.currentTimeMillis();
    }

    public String getIps(){
        try {
            return InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 消息转为在消息中间件传输的内容
     * @return 
     * @throws BusinessException
     */
    public String toJSONString() throws BusinessException {
        createMessageId();
        try {
            return JsonUtil.toJSon(this);
        } catch (BusinessException e) {
            throw e;
        }
    }
    /**
     * 接收到的消息转为实体对象
     * @param content 消息内容
     * @return 消息实体
     * @throws BusinessException
     */
    public Message toMessage(String content) throws BusinessException{
        return JsonUtil.readValue(content, Message.class);
    }
    public String toString(){
        String date =null;      
        try {
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
            date = sdf.format(new Date(createTime));
        } catch (Exception e) {         

        } 
        StringBuffer sb = new StringBuffer();
        sb.append("messageId:"+this.messageId+"\r\n").append("sourceMessageId:"+this.messageId+"\r\n")
          .append("sender:"+sender+"\r\n").append("messageBody"+messageBody+"\r\n")
          .append("createTime="+date+"\r\n");
        return sb.toString();

    }
    public String getMessageId() {
        return messageId;
    }
    private void createMessageId() {        
        this.messageId = sender+createUUID();
    }
    private String createUUID(){
        String id = UUID.randomUUID().toString();       
        return id.substring(0,8)+id.substring(9,13)+id.substring(14,18)+id.substring(19,23)+id.substring(24); //去掉“-”符号 
    }   
    public String getSender() {
        return sender;
    }
    public void setSender(String sender) {
        this.sender = sender;
    }
    public long getCreateTime() {
        return createTime;
    }
    public void setCreateTime(long createTime) {
        this.createTime = createTime;
    }
    public String getSourceMessageId() {
        return sourceMessageId;
    }
    public void setSourceMessageId(String sourceMessageId) {
        this.sourceMessageId = sourceMessageId;
    }
    public byte
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值