上一篇文章我们讲到了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