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>
阅读全文
0 0
- ITOO---选课里的Spring-RabbitMq
- ITOO---选课之RabbitMQ搭建
- ITOO---选课里的“秒杀”业务设计
- ITOO---选课里的“秒杀”业务实现(一)
- ITOO项目选课系统的问题小结
- spring的rabbitmq配置
- spring的rabbitmq配置
- (java)纯代码用spring里集成的RabbitMQ实现一个简单的收发程序
- ITOO---“秒杀”选课之Redis序列化
- rabbitmq安装和运行rabbitmq-tutorials里的erlang例子
- rabbitMq与spring的整合
- RabbitMQ与Spring的整合
- ITOO-linq的应用
- ITOO的知识集锦
- ITOO遇到的问题
- RabbitMQ(七)用RabbitMQ实现分布式系统里的信号量控制 -- Distributed Semaphores with RabbitMQ
- RabbitMQ学习之基于spring-rabbitmq的消息异步发送
- RabbitMQ学习之基于spring-rabbitmq的RPC远程调用
- LightOJ
- 单表60亿记录等大数据场景的MySQL优化和运维之道
- Party at Hali-Bula UVA
- ESXi6.5的坑之一
- 二分匹配 匈牙利算法
- ITOO---选课里的Spring-RabbitMq
- 链表中倒数第k个节点
- 冒泡排序加个人理解注释
- pci 相关链接
- js上传视频方法及监控进度
- CSS-DOM
- Mysql权限控制
- bzoj 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
- C++获取磁盘分区空间情况