//获取当前时间:毫秒
long a = System.currentTimeMillis();
System.out.println("a :" + a); try
{
//更改订单状态
shopService.updateOrder(order); //如果订单状态从 支付成功 改成 已发货,则给用户发送一条微信消息。
if (Integer.parseInt(stats) == 3){
    //异步发送微信消息
MessageImpl messageImpl = new MessageImpl(openId, tranNum, logisticcompany, logisticnum);
messageImpl.run();
//同步发送微信消息
    //message.sendWxMessage(openId, tranNum, logisticcompany,logisticnum);
} }
catch (Exception e)
{
e.printStackTrace();
} //计算 try 内语句的执行时间
long b = System.currentTimeMillis();
System.out.println("b :" + b);
System.out.println(" b - a :" + (b - a));

  

package com.starcloud.helpapp.wxMessage.service.impl;

import org.springframework.stereotype.Service;

import net.sf.json.JSONObject;

import com..helpapp.common.Loger;
import com..helpapp.common.utils.Tools;
import com..helpapp.wxMessage.ConnectionUrlUtil;
import com..helpapp.wxMessage.beans.MsgTemplateBean;
import com..helpapp.wxMessage.common.Constant;
import com..helpapp.wxMessage.service.Message; public class MessageImpl implements Runnable
{ /**
*
* [简要描述]:推送微信消息
* [详细描述]: 1:订单状态改成已发货
*
* @param parameter
*/
String openId;
String tranNum;
String logisticcompany;
String logisticnum; public void MessageImpl(String openId,String tranNum,String logisticcompany,String logisticnum)
{
this.openId = openId;
this.tranNum = tranNum;
this.logisticcompany = logisticcompany;
this.logisticnum = logisticnum; } public void sendWxMessage(String openId,String tranNum,String logisticcompany,String logisticnum)
{ ;
JSONObject parameters = new JSONObject();
MsgTemplateBean bean = MsgTemplateBean.getMsgTemplageBean(tranNum,logisticcompany,logisticnum);
bean.setTouser(openId);
parameters = JSONObject.fromObject(bean);
System.out.println("parameters: " + parameters.toString());
// else
// {
//
// MsgforDistributeBean bean = MsgforDistributeBean.getMsgTemplageBean(payfee,phoneNum,proName);
// bean.setTouser(openId);
// parameters = JSONObject.fromObject(bean);
// }
Loger.logtxt("WxMessage", "发送消息"+parameters);
String access_token = getAccess_token();
if(null != access_token)
{
String returnstr = ConnectionUrlUtil.sendPost(Constant.SEND_MESSAGEURL+"?access_token="+access_token,parameters.toString());
try
{
JSONObject returnJson = JSONObject.fromObject(returnstr); if(0 == returnJson.getInt("errcode"))
{
Loger.logtxt("WxMessage", "发送消息成功"+parameters);
}
else
{
Loger.logtxt("WxMessage", "发送消息失败"+parameters);
}
}
catch (Exception e)
{
e.printStackTrace();
} }
else
{
//发送失败,获取token失败
Loger.logtxt("WxMessage", "发送消息失败,原因获取access_token失败 ");
} }
/**
*
* [简要描述]:获取到access_token
* [详细描述]:
*
* @return
*/
public String getAccess_token()
{
String access_token = "";
String access_token_json = ConnectionUrlUtil.sendPost(Constant.TOKEN_URL, "grant_type=client_credential&appid=" + Constant.APP_ID + "&secret="
+ Constant.APP_SECRET);
if(Tools.isNotEmty(access_token_json))
{
JSONObject tokenJson = JSONObject.fromObject(access_token_json);
if(null != tokenJson && null!=tokenJson.get("access_token"))
{
//ACCESS_TOKEN
access_token = tokenJson.getString("access_token");
}
}
return access_token;
}
@override
public void run(){
sendWxMessage(openId,tranNum, logisticcompany, logisticnum);
}
}

  

增加线程异步发送消息的方法二(Runnable)的更多相关文章

  1. 增加线程异步发送消息的方法一(Thread)

    @RequestMapping(value="order/updateOrder.do") public String updateOrder(HttpServletRequest ...

  2. Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)

    keyword:Android 使用handler实现线程间发送消息 (主线程 与 子线程之间).(子线程 与 子线程之间) 相信大家平时都有使用到异步线程往主线程(UI线程)发送消息的情况. 本文主 ...

  3. Delphi实现获取句柄并发送消息的方法(FindWindow、FindWindowEx、EnumChildWindows、SendMessage)

    Delphi实现获取句柄并发送消息的方法 本文以实例形式详细说明了Delphi获取句柄并发送消息的方法,具体用法说明如下: 查找另外一个窗口的句柄: handle := FindWindow(nil, ...

  4. kafka7 探索生产者同步or异步发送消息

    1.生产者:在发送完消息后,收到回执确认. 主要是在SimpleProducer.java中修改了发送消息的2行代码,用到了回调函数,修改如下: //发送消息 ProducerRecord<St ...

  5. ActiveMQ producer同步/异步发送消息

    http://activemq.apache.org/async-sends.html producer发送消息有同步和异步两种模式,可以通过代码配置: ((ActiveMQConnection)co ...

  6. C#实现在应用程序间发送消息的方法示例

    本文实例讲述了C#实现在应用程序间发送消息的方法.分享给大家供大家参考,具体如下: 首先建立两个C#应用程序项目. 第一个项目包含一个Windows Form(Form1),在Form1上有一个But ...

  7. Rocketmq异步发送消息

    package com.bfxy.rocketmq.quickstart; import java.util.List; import org.apache.rocketmq.client.excep ...

  8. 【转载】Delphi7从子线程中发送消息到主线程触发事件执行

    在对数据库的操作时,有时要用一个子线程来进行后台的数据操作.比如说数据备份,转档什么的.在主窗口还能同是进行其它操作.而有时后台每处理一个数据文件,要向主窗口发送消息,让主窗口实时显示处理进度在窗口上 ...

  9. java 中Handler 和Runnable 的使用 异步发送消息 转

    public class MainActivity extends Activity { TextView text1, text2; Button button; Thread th; @Overr ...

随机推荐

  1. 顶级的JavaScript框架、库、工具及其使用

    几乎每隔一个星期,就有一个新的 JavaScript 库席卷网络社区!Web 社区日益活跃.多样,并在多个领域快速成长.想要研究每一个重要的 JavaScript 框架和库,是个不可能完成的任务.接下 ...

  2. 【玩转单片机系列001】 08接口双色LED显示屏驱动方式探索

    前些日子,从淘宝上购得一块08接口的双色LED显示屏(打算做个音乐频谱显示器),捣鼓了好几天,终于搞清楚了其控制原理,在这里做个总结,算是备忘吧. 1.LED显示屏的扫描方式 LED显示屏的扫描方式有 ...

  3. ActiveMQ的介绍及使用实例.

    今天就来说下 这个项目中使用ActiveMQ的情况, MQ: message queue, 顾名思义就是消息队列的意思. 一: 使用场景:  消息队列在大型电子商务类网站,如京东.淘宝.去哪儿等网站有 ...

  4. 一个上好的C# http/https类

    直接Copy拿去用吧: 新的 tls 协议需要新的.net版本, tls 至少更新到.net4吧,尽量用最新的.net! 不然出错了就折腾... using System; using System. ...

  5. CSS3学习总结3-3D与动画

    前言:这是篇CSS3中关于3D效果与动画相关的内容. (1)在CSS3的3D效果中,需要结合透视perspective的属性才能看到3d的效果,这个属性在屏幕上实现了元素近大远小的效果,所以要使用CS ...

  6. c# 文件属性读取操作及文件之间操作

    c# 获取文件最后修改日期代码FileInfo f = new FileInfo(@"c:\1.txt");Console.WriteLine(f.LastWriteTime.To ...

  7. webBrowser 加载网页

    事件 webBrowser_DocumentCompleted private void webBrowser_DocumentCompleted(object sender, WebBrowserD ...

  8. Makefile

    原文链接:http://www.orlion.ga/816/ 一.基本规则 对于一个拥有多个文件的c项目,编译时可能是这样的指令: gcc main.c stack.c -o main 如果编译之后又 ...

  9. Neutron 网络基本概念 - 每天5分钟玩转 OpenStack(66)

    上次我们讨论了 Neutron 提供的功能,今天我们学习 Neutron 模块几个重要的概念. Neutron 管理的网络资源包括 Network,subnet 和 port,下面依次介绍. netw ...

  10. DDD 领域驱动设计-三个问题思考实体和值对象(续)

    上一篇:DDD 领域驱动设计-三个问题思考实体和值对象 说实话,整理现在这一篇博文的想法,在上一篇发布出来的时候就有了,但到现在才动起笔来,而且写之前又反复读了上一篇博文的内容及评论,然后去收集资料, ...