ITOO---选课里的Spring-RabbitMq

来源:互联网 发布:大数据分析的案例 编辑:程序博客网 时间:2024/06/08 00:27

前言

项目里需要用到RabbitMQ来做数据持久化的工作,需要将RabbitMQ集成到Spring中。生产端需要将同步消息发送到MQ,消费者接受后持久化到数据库;

生产端

/**     * 退课     * @param coursetype     * @param redisId     * @param courseId     * @param teachClassId     * @param studentId     * @return     * @throws Exception     */    @Override    public boolean deleteCourse(String coursetype,String redisId, String courseId,String teachClassId, String studentId)  {        String publicStudentKey = STUDENTREDISPUBLIC + studentId;        String majorStudentKey = STUDENTREDISMAJOR + studentId;        String  msg =teachClassId+";"+studentId+";"+false; //要添加到mq中的数据        boolean flag =true;        //1.学生已选课程中少一条--调用deleteFromStudentSelectedCourse        if( PUBLICCHOOSECOURSE.equals(coursetype)){            deleteFromStudentSelectedCourse(publicStudentKey,courseId);        }else if( MAJORCHOOSECOURSE.equals(coursetype) ){            deleteFromStudentSelectedCourse(majorStudentKey,courseId);        }        //2.课程容量key value中数量增加1        //3.mq中传入数据        boolean flagCourse =JedisCacheUtil.exists(redisId);        if (flagCourse) {            synchronized(this) {//给容量加上锁                //进行容量加操作                JedisCacheUtil.incr(redisId);                //2.运用注入的RabbitMQ模板类进行消息的发送                //经过springAOP 跳转到mqConsumer类中的listen方法中                template.convertAndSend(msg);            }        }        return  flag;    }

消费端

package com.dmsdbj.itoo.teachingManagement.service.impl;import com.dmsdbj.itoo.teachingManagement.entity.StudentTeachclassEntity;import com.dmsdbj.itoo.teachingManagement.facade.StudentTeachclassFacade;import com.dmsdbj.itoo.tool.UUID.UuidUtils;import org.springframework.beans.factory.annotation.Autowired;import java.util.Date;/** * RabbitMq的消费者 * 处理ChooseCourseServiceImpl中选课业务的选课/退课操作 * Created by F-mdh on 2017/7/16. */public class mqConsumer {    //需要调用studentTeachClassFacade的方法,注入;    @Autowired    StudentTeachclassFacade studentTeachclassFacade;    //具体执行业务的方法    public void listen(String msg) {        //1.打印监听的消息内容(后期可删除)        System.out.println("消费者: " + msg);        //2.获取teachClassID +studentID +状态标识        String[] StrList =msg.split(";");        String teachClassID =StrList[0].toString();        String studentID =StrList[1].toString();        String struts  = StrList[2].toString();        //3.实例化实体【T_student_teachclass】        StudentTeachclassEntity StuEntity =new StudentTeachclassEntity();        //4.判断状态码true=添加:选课   ; false =删除:退课        if(struts.equals("true")){            //选课            StuEntity.setId(UuidUtils.base58Uuid());//参考文档            StuEntity.setOperator("mdh");//参考文档=(String) TenancyContext.UserID.get()            StuEntity.setIsDelete(0);//    0/1  ??  未删除/删除            StuEntity.setRemark("添加信息,绑定上课班ID和学生ID");            StuEntity.setStudentId(studentID);            StuEntity.setTeachclassId(teachClassID);            StuEntity.setCreateTime(new Date());            StuEntity.setUpdateTime(new Date());            studentTeachclassFacade.insertTeachclassEntity(StuEntity);        }else{            //退课            studentTeachclassFacade.deleteByStudentIdandByTeachcalssId(studentID,teachClassID);        }    }}

配置文件

<beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"       xsi:schemaLocation="http://www.springframework.org/schema/rabbit    http://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsd    http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">    <!-- 定义RabbitMQ的连接工厂 -->    <rabbit:connection-factory id="connectionFactory"                               host="192.###.###.###" port="5672" username="admin" password="###"                               virtual-host="ChooseCourse" />    <!-- 定义Rabbit模板,指定连接工厂以及定义exchange -->    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="fanoutExchange" />    <!-- <rabbit:template id="amqpTemplate" connection-factory="connectionFactory"        exchange="fanoutExchange" routing-key="foo.bar" /> -->    <!-- MQ的管理,包括队列、交换器等 -->    <rabbit:admin connection-factory="connectionFactory" />    <!-- 定义队列,自动声明 -->    <rabbit:queue name="myQueue" auto-declare="true"/>    <!-- 定义交换器,自动声明 -->    <rabbit:fanout-exchange name="fanoutExchange" auto-declare="true">        <rabbit:bindings>            <rabbit:binding queue="myQueue"/>        </rabbit:bindings>    </rabbit:fanout-exchange>    <!--    <rabbit:topic-exchange name="myExchange">            <rabbit:bindings>                <rabbit:binding queue="myQueue" pattern="foo.*" />            </rabbit:bindings>        </rabbit:topic-exchange> -->    <!-- 队列监听:acknowledge确认机制 默认是开启的呃;auto属性代表一发消息既代表收到,不可取自动接收acknowledge="auto"-->    <rabbit:listener-container connection-factory="connectionFactory" >        <rabbit:listener ref="msg" method="listen" queue-names="myQueue" />    </rabbit:listener-container>    <!--消费者 -->    <bean id="msg" class="com.dmsdbj.itoo.teachingManagement.service.impl.mqConsumer" /></beans>
原创粉丝点击