1. 需求
1)需求说明
a. 请求服务器发送到kafka中的请求,包含最少一个终端的信息,如ID
b. 增加一个数据库,保存评估结果。
c. 终端循环向请求服务器发送http请求
d. 请求处理服务器收到终端的请求,先访问数据库,得到评估结果并返回,如果没有结果,就将请求内容发送到kafka。
2)系统框架流程图
2. 实现思路
1)建立数据库,数据库表
2)虚拟发送请求信息—user_id, pic — kafka中的生产者
3)将图片名称自动更新并存入临时文件夹
4)得到传过来的图片编号和用户id
5)查询数据库,看对应图片编号是否存在 — kafka中的消费者接收
(1) 存在,看是否有score;
a. 存在,直接返回score;
b. 不存在,将图片编号和用户id存入数据库,将图片传入Kafka中,评估系统进行处理,得到一个score,存入对应图片编号的score,返回score。
(2) 不存在,将图片编号与用户id存入数据库
3.数据库逻辑部分
1)建表
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `assess`
-- ----------------------------
DROP TABLE IF EXISTS `assess`;
CREATE TABLE `assess` (
`a_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`user_id` int(11) NOT NULL COMMENT '用户id',
`score` float DEFAULT NULL COMMENT '评估分数',
`pic_name` char(255) DEFAULT NULL COMMENT '图片名称-不重复',
PRIMARY KEY (`a_id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
2)Dao层功能
Dao层主要实现四个功能:
- 通过图片编号查找该图片是否存在
// 通过图片编号查找该图片是否存在
public boolean isExist(String pic){
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try {
String sql = "select count(*) from assess where pic_name = '"+pic+"';";
System.out.println(sql);
conn = BaseDao.getConnection();
st = conn.createStatement();
rs = st.executeQuery(sql);
//如果找到返回true
while (rs.next()){
if(rs.getBoolean(1))
return true;
else
return false;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
BaseDao.closeAll(rs, st, conn);
}
return false;
}
- 将用户id和图片编号加入数据库
//将用户id和图片编号加入数据库
public void addData(int user_id, String pic){
Connection con=null;
ResultSet rs=null;
Statement st=null;
try {
String sql = "INSERT INTO `assess` (`user_id`, `pic_name`) VALUES ('"+user_id+"', '"+pic+"');\n";
System.out.println(sql);
con= BaseDao.getConnection();
st=con.createStatement();
st.execute(sql);
}catch(Exception e) {
e.printStackTrace();
}finally{
BaseDao.closeAll(rs, st, con);
}
}
- 将评估系统评估得到的分数加入数据库
//将score加入数据库
public void addScore(float score, String pic){
Connection con=null;
ResultSet rs=null;
Statement st=null;
try {
String sql = "UPDATE `assess` set assess.score = '"+score