ITOO---选课里的Spring-RabbitMq

前言

项目里需要用到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>
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值