1 课程计划

1、在线下单(补充)

2、activeMQ使用(重点)

n 简介和安装

n activeMQ入门案例

n spring整合activeMQ应用

3、重构客户注册功能,发短信功能分离

n bos_fore项目客户注册作为短信消息生产者

n 创建bos_sms短信平台消费消息并发送短信

1 在线下单

1.1 策略二:根据客户取件地址解析完成自动分单

 

 

 

 

//查询寄件人所在区域,查询该区域下分区记录

Set<SubArea> subareas = sendArea.getSubareas();

for (SubArea subArea : subareas) {

//确定寄件人详细地址所属分区

String sendAddress = order.getSendAddress();  //寄件人详细地址

if(sendAddress.contains(subArea.getKeyWords())||sendAddress.contains(subArea.getAssistKeyWords())){

//分区-定区:多对一

FixedArea fixedArea = subArea.getFixedArea();

if(fixedArea!=null){

//定区-快递员:多对多

Set<Courier> couriers = fixedArea.getCouriers();

if(couriers.isEmpty()){

//TODO 简化操作 判断上班时间   取件任务数量

for (Courier courier : couriers) {

//完成自动分单-1、产生快递员工单  2、发送取件短信

WorkBill workBill = new WorkBill();

workBill.setAttachbilltimes(0);//追单次数

workBill.setBuildtime(new Date());//工单时间

workBill.setCourier(courier);  //工单关联快递员

workBill.setOrder(order); //工单关联订单

workBill.setPickstate("待取件");

workBill.setRemark(order.getRemark());

workBill.setType("新单");

workBillDao.save(workBill);

Map<String, Object> map = new HashMap<>();

map.put("customerAddress", order.getSendAddress());

map.put("customerName", order.getSendName());

map.put("customerTelephone", order.getSendMobile());

map.put("customerRemark", order.getSendMobileMsg());

//发送短信

Boolean flag = AliSmsUtil.sendMessage(courier.getTelephone(), "SMS_121136520", map);

workBill.setSmsNumber(flag.toString());

//自动分单

order.setOrderType("自动分单");

order.setStatus("待取件");

order.setCourier(courier);  //订单关联快递员

return;

}

}

}

}

}

//人工分单

order.setOrderType("人工分单");

1.2 测试

将资料中分区数据通过POI将数据导入到分区表中。

 

2 Apache activeMQ消息队列(重点)

Message Queue:消息队列。

1.1 简介和安装

 

JMS:Jave Message Service   java消息服务

ActiveMQ:实现JMS规范

 

消息队列中间件是分布式系统中的重要组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性的架构

 

使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,MetaMQ等

官网:http://activemq.apache.org/

 

 

注意:jdk的安装目录不要有空格!!!!!!!!!!

进入bin目录启动服务。

http://localhost:8161/admin/queues.jsp

http端口8161:web页面访问端口

Tcp端口连接服务端口:61616

1.1.1 配置生产者

 

第一步:创建maven工程,导入spring和activeMQ的坐标

<dependencies>

  <dependency>

  <groupId>org.apache.activemq</groupId>

  <artifactId>activemq-all</artifactId>

  <version>5.2.0</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-jms</artifactId>

  <version>4.2.4.RELEASE</version>

  </dependency>

  <dependency>

  <groupId>junit</groupId>

  <artifactId>junit</artifactId>

  <version>4.9</version>

  </dependency>

  <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-test</artifactId>

  <version>4.2.4.RELEASE</version>

  </dependency>

<dependency>

<groupId>org.apache.xbean</groupId>

<artifactId>xbean-spring</artifactId>

<version>4.2</version>

</dependency>

  </dependencies>

 

第二步:提供spring配置文件(配置生产者相关)引入amq,jms名称空间

xmlns:amq="http://activemq.apache.org/schema/core"

xmlns:jms="http://www.springframework.org/schema/jms"

http://www.springframework.org/schema/jms

http://www.springframework.org/schema/jms/spring-jms.xsd

http://activemq.apache.org/schema/core

http://activemq.apache.org/schema/core/activemq-core-5.8.0.xsd

 

配置连接工厂(缓存session工厂),配置模板对象

<!-- 将发送消息对象创建 -->

<context:component-scan base-package="cn.itcast"></context:component-scan>

<!-- 配置连接工厂:避免报错名称空间问题:通过此配置产生ActiveMQConnectionFactory -->

<!-- <amq:connectionFactory id="amqConnectionFactory"

userName="admin"

password="admin"

brokerURL="tcp://localhost:61616">

</amq:connectionFactory>  -->

<!-- 通过配置bean标签将ActiveMQConnectionFactory对象产生 -->

<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">

<!-- 通过代码new,通过有参构造注入 -->

<constructor-arg index="0" value="admin"></constructor-arg>

<constructor-arg index="1" value="admin"></constructor-arg>

<constructor-arg index="2" value="tcp://localhost:61616"></constructor-arg>

</bean>

<!-- 为了提交效率:提供缓存Session的工厂 -->

<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">

<!-- 注入连接工厂 -->

<property name="targetConnectionFactory" ref="amqConnectionFactory"></property>

<!-- 设置缓存session个数 -->

<property name="sessionCacheSize" value="100"></property>

</bean>

<!-- 配置spring整合activeMQ:提供模板对象:可以发送队列形式(点对点)消息,也可以发送发布订阅形式 -->

<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">

<!-- 注入连接工厂 -->

<property name="connectionFactory" ref="cachingConnectionFactory"></property>

<!-- 指定消息类型:默认队列形式 -->

<property name="pubSubDomain" value="false"></property>

</bean>

<bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">

<property name="connectionFactory" ref="cachingConnectionFactory"></property>

<!-- 指定消息类型:默认队列形式 -->

<property name="pubSubDomain" value="true"></property>

</bean>

 

 

第四步:编写单元测试方法,在类中注入模板对象JmsTemplate。通过此对象发送消息到队列

 

1.1.2 配置消费者

将生产者工程拷贝一份:

 

 

第一步:开发一个类,监听消息队列

 

第二步:配置spring 配置文件,注册监听器

<!-- 将发送消息对象创建 -->

<context:component-scan base-package="cn.itcast"></context:component-scan>

<!-- 配置连接工厂:避免报错名称空间问题:通过此配置产生ActiveMQConnectionFactory -->

<!-- <amq:connectionFactory id="amqConnectionFactory"

userName="admin"

password="admin"

brokerURL="tcp://localhost:61616">

</amq:connectionFactory>  -->

<!-- 通过配置bean标签将ActiveMQConnectionFactory对象产生 -->

<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">

<!-- 通过代码new,通过有参构造注入 -->

<constructor-arg index="0" value="admin"></constructor-arg>

<constructor-arg index="1" value="admin"></constructor-arg>

<constructor-arg index="2" value="tcp://localhost:61616"></constructor-arg>

</bean>

<!-- 为了提交效率:提供缓存Session的工程 -->

<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">

<!-- 注入连接工厂 -->

<property name="targetConnectionFactory" ref="amqConnectionFactory"></property>

<!-- 设置缓存session个数 -->

<property name="sessionCacheSize" value="100"></property>

</bean>

<!-- 配置消费者监听器 -->

<!-- 配置消费者 start:采用监听器方式,监听队列中消息

acknowledge:自动应答,消费完消息通知生产者

destination-type:消息类型:topic/queue

container-class:监听消息listener对象

-->

<jms:listener-container

acknowledge="auto"  destination-type="queue"  connection-factory="cachingConnectionFactory">

<!-- 监听哪个队列 -->

<jms:listener destination="spring_queue" ref="jmsMessageListener"/>

</jms:listener-container>

测试代码:

 

1.1 mq总结

 

2 重构客户注册功能,发短信功能分离

1.1 bos_fore项目客户注册作为短信消息生产者

 

第一步:导入activeMQ相关的坐标:注意添加xBean-spring依赖在common_parent项目中

<dependency>

<groupId>org.apache.xbean</groupId>

<artifactId>xbean-spring</artifactId>

<version>4.2</version>

</dependency>

 

第二步:在前台系统的spring配置文件中配置activeMQ相关的对象

<!-- 配置连接工厂 -->

<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">

<constructor-arg index="0" value="admin"></constructor-arg>

<constructor-arg index="1" value="admin"></constructor-arg>

<constructor-arg index="2" value="tcp://localhost:61616"></constructor-arg>

</bean>

<!-- 配置spring提供缓存连接工厂:提高效率 -->

<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">

<property name="targetConnectionFactory" ref="amqConnectionFactory"></property>

<property name="sessionCacheSize" value="100"></property>

</bean>

<!-- 配置生产者 start spring 提供模板对象,通过模板对象向activeMQ服务器写入消息(1、队列形式queue 2、主题模式topic) -->

<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">

<property name="connectionFactory" ref="connectionFactory"></property>

<!-- 指定写入消息模式 -->

<property name="pubSubDomain" value="false"></property>

</bean>

第三步:使用注解方式将模板对象注入给Action,直接发送消息

 

 

 

 

1.2 创建bos_sms短信系统消费消息并发送短信

发短信业务逻辑放在短信系统中。

 

 

第一步:创建工程

 

 

第二步:spring环境配置web.xml,注册spring的监听器

 

第三步:提供spring配置文件,配置activeMQ的连接工厂

<!-- 将发送消息对象创建 -->

<context:component-scan base-package="cn.itcast"></context:component-scan>

<!-- 配置连接工厂:避免报错名称空间问题:通过此配置产生ActiveMQConnectionFactory -->

<!-- <amq:connectionFactory id="amqConnectionFactory"

userName="admin"

password="admin"

brokerURL="tcp://localhost:61616">

</amq:connectionFactory>  -->

<!-- 通过配置bean标签将ActiveMQConnectionFactory对象产生 -->

<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">

<!-- 通过代码new,通过有参构造注入 -->

<constructor-arg index="0" value="admin"></constructor-arg>

<constructor-arg index="1" value="admin"></constructor-arg>

<constructor-arg index="2" value="tcp://localhost:61616"></constructor-arg>

</bean>

<!-- 为了提交效率:提供缓存Session的工程 -->

<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">

<!-- 注入连接工厂 -->

<property name="targetConnectionFactory" ref="amqConnectionFactory"></property>

<!-- 设置缓存session个数 -->

<property name="sessionCacheSize" value="10"></property>

</bean>

<!-- 配置消费者监听器 -->

<!-- 配置消费者 start:采用监听器方式,监听队列中消息

acknowledge:自动应答,消费完消息通知生产者

destination-type:消息类型:topic/queue

container-class:监听消息listener对象

-->

<jms:listener-container

acknowledge="auto"  destination-type="queue"  connection-factory="cachingConnectionFactory">

<!-- 监听哪个队列 -->

<jms:listener destination="sms_message" ref=" smsListener"/>

</jms:listener-container>

第四步:开发一个监听器类,用于监听队列中的消息

 

第五步:在spring配置文件中注册监听器

 

项目一:在线下单(补充) activeMQ使用(重点) 重构客户注册功能,发短信功能分离的更多相关文章

  1. 客户注册功能,发短信功能分离 通过ActiveMQ实现

    客户注册功能,发短信功能分离 通过ActiveMQ 配置链接工厂, 配置session缓存工厂(引入链接工厂) 2.配置模板对象JmsTemplate 引入缓存工厂    指定消息模式(队列,发布和订 ...

  2. 重构客户注册-基于ActiveMQ实现短信验证码生产者

    重构目标:将bos_fore项目中的CustomerAction作为短信消息生产者,将消息发给ActiveMQ,创建一个单独的SMS项目,作为短信息的消费者,从ActiveMQ获取短信消息,调用第三方 ...

  3. 项目一:第九天 1、前台客户登录 2、Jquery citypicker省市区三级联动插件 4、业务受理(在线下单)

    1. 前台客户登录 2. Jquery citypicker省市区三级联动插件 3. 百度地图介绍 4. 业务受理(在线下单) 1 实现前台系统登录功能 1.1 Md5加密 admin(明文)---- ...

  4. Android短信过滤项目中的观察者模式

    观察者模式: 观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 观察者模式提供了一种对象设计, 让主题和观察者之间松耦合.主题只知道观察者实现了某个接 ...

  5. 【SSH网上商城项目实战26】完成订单支付后的短信发送功能

     转自: https://blog.csdn.net/eson_15/article/details/51475431 上一节我们使用了Java mail完成了给买家发送邮件的功能,还遗留一个功能,就 ...

  6. 经管资源库项目总结----在线预览office文件的实现与总结

    依旧是这个经管的项目.在线预览作为资源和文档管理系统的一个很酷的并且是如此重要的功能,是必须要实现的.然后百度一下office在线预览,看起来so eazy啊,各种博客各种demo,一下子就做出效果来 ...

  7. JavaWeb项目:在线评测系统

    此项目为本人的Java大作业. 项目文件和相关资源已上传到本人的GitHub 一.项目概况 1.1设计内容 一个在线评测系统,分用户和管理员两种身份.用户能够通过注册登录,参加比赛,最后实时得到比赛结 ...

  8. 常用快递API及快递在线下单API分享

    1.常用快递API 支持顺丰.EMS.申通.圆通.韵达.汇通.中通.天天.德邦.全峰等主流快递公司. 文档地址:https://www.juhe.cn/docs/api/id/43 1.1常用快递查询 ...

  9. flowable+tomcat部署flowable项目,在线画流程图

    参考: flowable+tomcat部署flowable项目,在线画流程图

随机推荐

  1. 201621123014《Java程序设计》第八周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 答: 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: Arr ...

  2. MySQL实战 | 06/07 简单说说MySQL中的锁

    原文链接:MySQL实战 | 06/07 简单说说MySQL中的锁 本文思维导图:https://mubu.com/doc/AOa-5t-IsG 锁是计算机协调多个进程或纯线程并发访问某一资源的机制. ...

  3. kali_linux学习笔记

    kali linux ssh登陆: 一.配置SSH参数 修改sshd_config文件,命令为: vi /etc/ssh/sshd_config 将#PasswordAuthentication no ...

  4. webpack 故障处理

    Webpack 的配置比较复杂,很容出现错误,下面是一些通常的故障处理手段. 一般情况下,webpack 如果出问题,会打印一些简单的错误信息,比如模块没有找到.我们还可以通过参数 --display ...

  5. server2012/win8 卸载.net framework 4.5后 无法进入系统桌面故障解决【转】

    都重装过一次了,第二次被坑了,真的是痛苦的经历 只剩下的cmd什么命令都不能执行啊,powershell也执行不了呀[网上都是说powershell切换的] 故障:服务器装的是windows2012 ...

  6. try catch(java)

    1 try.catch.finally语句中,在如果try语句有return语句,则返回的之后当前try中变量此时对应的值,此后对变量做任何的修改,都不影响try中return的返回值 2 如果fin ...

  7. flask之基础概念

    [应用]一个 Flask 应用是一个 Flask 类的实例.可以在一个被称为应用工厂的函数内部创建 Flask实例.所有应用相关的配置.注册和其他设置都会在函数内部完成,然后返回这个应用.__init ...

  8. web打印详解

    在B/S模式开发中,打印是个很大的困扰.无论是采用页面直接输出或者引用WORD.DLL也好,都有不足之处. 目前最好的办法就是采用第三方控件,网上流传的打印控件有很多.总结了下推荐几个给大家: 一.首 ...

  9. 机器学习:逻辑回归(OvR 与 OvO)

    一.基础理解 问题:逻辑回归算法是用回归的方式解决分类的问题,而且只可以解决二分类问题: 方案:可以通过改造,使得逻辑回归算法可以解决多分类问题: 改造方法: OvR(One vs Rest),一对剩 ...

  10. 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN

    参考文献 [1]Rich feature hierarchies for accurate object detection and semantic segmentation [2]Fast R-C ...