毕设分享 基于SpringCloud的微服务人才招聘系统设计与实现


0 项目说明

基于SpringCloud的微服务人才招聘系统设计与实现

提示:适合用于课程设计或毕业设计,工作量达标,源码开放


1 项目结构

在这里插入图片描述

2 使用说明

使用时麻烦将Nacos,ZipKin,Sentinel等组件自行搭建使用,本人服务器性能较差
存储在Nacos中的配置文件在https://github.com/stalary/pf-config
需要自行启动两个本人开源的服务

  • lightmq(使用lightmq.stalary.com会导致消息被我的服务消费)https://github.com/stalary/lightMQ
  • usercenter(使用usercenter.stalary.com会导致用户数据存储到我的数据库,数据泄漏)
    https://github.com/stalary/UserCenter

本地启动注意切换Nacos的Namespace,否则会出现本地服务与线上服务服务发现不通的情况,具体参照本人的一篇博客https://www.jianshu.com/p/5c84a1d3b2f9

3 部署方式

  • docker部署:mvn docker:build & java -jar
  • 物理机部署:mvn install & java -jar

4 技术栈

  • Spring-Boot
  • Spring-Cloud
  • Spring-Cloud-Gateway
  • Spring-Cloud-Sleuth(对业务侵入性较大,建议替换到 Skywalking )
  • Sentinel
  • Nacos
  • Feign
  • Docker
  • Mysql
  • Mongodb
  • Redis
  • LightMQ
  • EasyDoc
  • WebSocket
  • Jpa
  • UserCenter
  • ElasticSearch

5 功能

  • 上传简历||填写简历
  • 投递简历
  • 发布职位
  • 简历打分(基于规则匹配打分)
  • 消息推送
  • 邮件提醒
  • 推荐候选人
  • 推荐职位

4 项目源码

/**
 *
 * Copyright 2018 Stalary.
 */
package com.stalary.pf.consumer.service;

import com.alibaba.fastjson.JSONObject;
import com.stalary.lightmqclient.MQListener;
import com.stalary.lightmqclient.MessageDto;
import com.stalary.lightmqclient.facade.MQConsumer;
import com.stalary.pf.consumer.client.*;
import com.stalary.pf.consumer.data.dto.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import static com.stalary.pf.consumer.data.constant.Constant.*;


/**
 * Consumer
 *
 * @author lirongqian
 */
@Service
@Slf4j
public class Consumer implements MQConsumer {

    private static ResumeClient resumeClient;

    @Autowired
    public void setResumeClient(ResumeClient resumeClient) {
        Consumer.resumeClient = resumeClient;
    }

    private static PushClient pushClient;

    @Autowired
    public void setPushClient(PushClient pushClient) {
        Consumer.pushClient = pushClient;
    }

    private static MessageClient messageClient;

    @Autowired
    public void setMessageClient(MessageClient messageClient) {
        Consumer.messageClient = messageClient;
    }

    private static RecruitClient recruitClient;

    @Autowired
    private void setRecruitClient(RecruitClient recruitClient) {
        Consumer.recruitClient = recruitClient;
    }

    private static UserClient userClient;

    @Autowired
    private void setUserClient(UserClient userClient) {
        Consumer.userClient = userClient;
    }

    private static OutsideClient outsideClient;

    @Autowired
    private void setOutsideClient(OutsideClient outsideClient) {
        Consumer.outsideClient = outsideClient;
    }

    @Override
    @MQListener(topics = {SEND_RESUME, RECEIVE_RESUME, HANDLE_RESUME})
    public void process(MessageDto messageDto) {
        long startTime = System.currentTimeMillis();
        String topic = messageDto.getTopic();
        String key = "";
        if (messageDto.getKey() != null) {
            key = messageDto.getKey();
        }
        String message = messageDto.getValue();
        Long offset = messageDto.getOffset();
        log.info("receive message: topic: " + topic + " key: " + key + " message: " + message + " offset: " + offset);
        if (HANDLE_RESUME.equals(topic)) {
            SendResume resume = JSONObject.parseObject(message, SendResume.class);
            // 处理投递简历
            resumeClient.handleResume(resume);
        } else if (SEND_RESUME.equals(topic)) {
            SendResume resume = JSONObject.parseObject(message, SendResume.class);
            // 存储投递的消息通知(系统发送)
            Long userId = resume.getUserId();
            Message m = new Message(0L, userId, "简历投递成功", resume.getTitle() + "简历投递成功", false);
            messageClient.saveMessage(m);
            // 统计通知未读的数量
            int count = messageClient.getNotReadCount(userId).getData();
            pushClient.sendMessage(userId, "" + count);
        } else if (RECEIVE_RESUME.equals(topic)) {
            SendResume resume = JSONObject.parseObject(message, SendResume.class);
            // 存储收到简历的消息通知(系统发送)
            Long recruitId = resume.getRecruitId();
            Long userId = resume.getUserId();
            Recruit recruit = recruitClient.getRecruit(recruitId).getData();
            UserInfo userInfo = userClient.getUserInfo(userId).getData();
            Long hrId = recruit.getHrId();
            Message m = new Message(0L, hrId, resume.getTitle() + "收到简历", resume.getTitle() + "收到来自" + userInfo.getSchool() + "的" + userInfo.getNickname() + "的简历", false);
            messageClient.saveMessage(m);
            outsideClient.sendEmail(new Email(userClient.getEmail(hrId).getData(), "收到投递简历", resume.getTitle() + "收到来自" + userInfo.getSchool() + "的" + userInfo.getNickname() + "的简历"));
            // 统计通知未读的数量
            int count = messageClient.getNotReadCount(hrId).getData();
            pushClient.sendMessage(hrId, "" + count);
        }
        long endTime = System.currentTimeMillis();
        log.info("Consumer.time=" + (endTime - startTime));
    }

}

5 最后

**项目分享: ** https://gitee.com/asoonis/htw

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值