精华内容
下载资源
问答
  • 微信消息处理队列实现

    千次阅读 2018-10-21 20:32:13
    文章目录微信消息处理队列实现**非阻塞队列:****阻塞队列:**代码   首先先来介绍一下阻塞队列和非阻塞队列: 非阻塞队列: PriorityQueue LinkedList   在使用非阻塞队列时遇到的问题:不会对当前...

    @(多线程&&并发)

    微信消息处理队列实现

    欢迎关注作者博客
    简书传送门


      首先先来介绍一下阻塞队列和非阻塞队列:

    非阻塞队列:
    1. PriorityQueue
    2. LinkedList

      在使用非阻塞队列时遇到的问题:不会对当前线程产生阻塞,在面对类似消费者-生产者的模型时,必须额外地实现同步策略以及线程间唤醒策略,这个实现起来非常麻烦。

      所以,阻塞队列恰恰不一样,阻塞队列会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程会自动被唤醒(不需要编写代码去唤醒)。

    阻塞队列:

    1.几种主要的阻塞队列
      在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个:
      ArrayBlockingQueue:基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小。并且可以指定公平性与非公平性,默认情况下为非公平的,即不保证等待时间最长的队列最优先能够访问队列。

      LinkedBlockingQueue:基于链表实现的一个阻塞队列,在创建LinkedBlockingQueue对象时如果不指定容量大小,则默认大小为Integer.MAX_VALUE。

      PriorityBlockingQueue:以上2种队列都是先进先出队列,而PriorityBlockingQueue却不是,它会按照元素的优先级对元素进行排序,按照优先级顺序出队,每次出队的元素都是优先级最高的元素。注意,此阻塞队列为无界阻塞队列,即容量没有上限,前面2种都是有界队列。

      DelayQueue:基于PriorityQueue,一种延时阻塞队列,DelayQueue中的元素只有当其指定的延迟时间到了,才能够从队列中获取到该元素。DelayQueue也是一个无界队列,因此往队列中插入数据的操作(生产者)永远不会被阻塞,而只有获取数据的操作(消费者)才会被阻塞。

    2.非阻塞队列和阻塞队列中的方法
    非阻塞队列:

      add(E e):将元素e插入到队列末尾,如果插入成功,则返回true;如果插入失败(即队列已满),则会抛出异常;
      remove():移除队首元素,若移除成功,则返回true;如果移除失败(队列为空),则会抛出异常;
      offer(E e):将元素e插入到队列末尾,如果插入成功,则返回true;如果插入失败(即队列已满),则返回false;
      poll():移除并获取队首元素,若成功,则返回队首元素;否则返回null;
      peek():获取队首元素,若成功,则返回队首元素;否则返回null

      对于非阻塞队列,一般情况下建议使用offer、poll和peek三个方法,不建议使用add和remove方法。因为使用offer、poll和peek三个方法可以通过返回值判断操作成功与否,而使用add和remove方法却不能达到这样的效果。注意,非阻塞队列中的方法都没有进行同步措施。

    阻塞队列:

      阻塞队列包括了非阻塞队列中的大部分方法,上面列举的5个方法在阻塞队列中都存在,但是要注意这5个方法在阻塞队列中都进行了同步措施。除此之外,阻塞队列提供了另外4个非常有用的方法:

      put方法用来向队尾存入元素,如果队列满,则等待;
      take方法用来从队首取元素,如果队列为空,则等待;
      offer方法用来向队尾存入元素,如果队列满,则等待一定的时间,当时间期限达到时,如果还没有插入成功,则返回false;否则返回true;
      poll方法用来从队首取元素,如果队列空,则等待一定的时间,当时间期限达到时,如果取到,则返回null;否则返回取得的元素;

    代码

    微信消息体:

    package com.scmd;
    
    import java.util.Date;
    
    /**
     * Created by zhouzhixiang on 2018/10/21.
     */
    public class WechatMsg {
        private Date sendtime;
        private String msg;
    
        public WechatMsg(Date sendtime, String msg) {
            this.sendtime = sendtime;
            this.msg = msg;
        }
    
        public WechatMsg() {
        }
    
        public Date getSendtime() {
            return sendtime;
        }
    
        public void setSendtime(Date sendtime) {
            this.sendtime = sendtime;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    }
    

    消息发送Job:

    package com.scmd;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    import java.util.concurrent.*;
    
    /**
     * Created by zhouzhixiang on 2018/10/21.
     */
    public class WechatMsgSendJob {
        private static Log log = LogFactory.getLog(WechatMsgSendJob.class);
        private static BlockingQueue<WechatMsg> msgs = new LinkedBlockingQueue<>(10000);
    
        public static void addMsg(WechatMsg msg){
            try{
                msgs.put(msg);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        public void init(){
            try{
                ExecutorService executorService = Executors.newFixedThreadPool(8);
                for (int i = 0; i < 8; i++){
                    executorService.submit(new Runnable(){
                        @Override
                        public void run() {
                            while (true){
                                try{
                                    WechatMsg msg = msgs.take();
                                    if(msg!=null){
    
                                    }
                                }catch (Exception e){
                                    e.printStackTrace();
                                    log.error("callWechatSendApi error",e);
                                }
                            }
                        }
                    });
                }
            }catch (Exception e){
                log.error("sendMsg eror",e);
            }
        }
    }
    

    欢迎加入Java猿社区
    扫码_搜索联合传播样式-标准色版.png

    展开全文
  • ToUserName与FromUserName的意思 在接收到微信推送的消息中tousername、fromusername的顺序与平台返回给微信(即要发送给微信用户)的交互信息中tousername、fromusername的值是相反的 接受到的消息中:tousername=...

    ToUserName与FromUserName的意思

    在接收到微信推送的消息中tousername、fromusername的顺序与平台返回给微信(即要发送给微信用户)的交互信息中tousername、fromusername的值是相反的

    • 接受到的消息中:tousername=开发者公众号,fromusername=openid
    • 发送给微信的消息中:tousername=openid,fromusername=开发者的公账号

    收包消息模板:

    <xml>
      <ToUserName><![CDATA[微信开发者公众号-公众号的微信号]]></ToUserName>
      <FromUserName><![CDATA[fromUser]]></FromUserName>
      <CreateTime>1348831860</CreateTime>
      <MsgType><![CDATA[text]]></MsgType>
      <Content><![CDATA[this is a test]]></Content>
      <MsgId>1234567890123456</MsgId>
    </xml>
    

    发包消息模板:

    <xml>
      <ToUserName><![CDATA[openid]]></ToUserName>
      <FromUserName><![CDATA[微信开发者公众号-公众号的微信号]]></FromUserName>
      <CreateTime>12345678</CreateTime>
      <MsgType><![CDATA[text]]></MsgType>
      <Content><![CDATA[你好]]></Content>
    </xml>
    
    展开全文
  • 微信消息被撤回?闪照无法保存?这样一步完美解决微信消息被撤回?闪照无法保存?一步设置完美解决!自微信推出撤回功能,对一些好奇心很强的朋友简直是一种折磨。就在昨天笔者收到的一条重要的消息被撤回了,在网上...

    原标题:收藏!微信消息被撤回?闪照无法保存?这样一步完美解决

    微信消息被撤回?闪照无法保存?一步设置完美解决!

    自微信推出撤回功能,对一些好奇心很强的朋友简直是一种折磨。就在昨天笔者收到的一条重要的消息被撤回了,在网上找了很多方法,终于看到被撤回的消息了。今天,笔者就筛选了几个比较简单的方法来教大家如何查看被撤回的消息!

    a96481e299e857f9c0774afead876b33.png

    对于苹果用户,因为苹果ios系统里会自动保存微信的消息并显示在通知栏。如果消息被撤回,苹果系统通知栏里还是可以看到。所以我们打开设置——通知,就可以查看每个app的通知权限。我们找到微信,点击“允许通知”和“在通知中心”显示,以后收到的微信消息就可以在通知栏中显示了,并且被撤回也能看到。但是这招只能对文字信息有用,对图片是无效的。

    ea7de2bd80df91d44aa7ebd2915869d3.png

    而对于安卓用户就恰恰相反了——只能看到图片,不能看到文字。因为安卓系统版本的微信会自动保存接受到的图片,及时被撤回,也依然存在手机内存中,这也是安卓系统的微信每用一段时间就会莫名其妙地多出很多图片的原因。

    当图片被撤回时,我们打开文件管理器——内部存储,找到微信储存的文件夹(Tencent)——MicroMsg,再打开图中这个文件名最长的文件,然后打开image2,之后一定要把排列顺序改为时间(降序),这样第一个文件夹里的图片就是最近收到的一张图片。我们点开第一个文件夹,把被撤回对应上时间的那个文件重命名,后缀名改为“jpg”,就可以打开了。

    cf924ae7cf0d7a19d416496708d4528d.png

    但是这种方法可能对部分机型没用。如果经常要使用,用软件更加方便。尤其是闪照,使用软件就可以轻松实现保存闪照了。网络上这种软件很多.返回搜狐,查看更多

    责任编辑:

    展开全文
  • 之前笔者曾经吐槽过微信电脑版的文件管理模式,不太满意微信电脑版不提供清理指定日期之前的记录或者微信存储文件夹超出指定大小提示清理等功能,导致有不少人的微信存储文件夹过大。(见:《惹人讨厌的微信PC端临时...

    之前笔者曾经吐槽过微信电脑版的文件管理模式,不太满意微信电脑版不提供清理指定日期之前的记录或者微信存储文件夹超出指定大小提示清理等功能,导致有不少人的微信存储文件夹过大。(见:《惹人讨厌的微信PC端临时文件(缓存)管理模式》)

    清理微信存储文件夹的所有记录文件很简单,可以直接参考上面提到的文章即可,但有时候会有这样的需求:需要清理指定日期之前的文件,保留最近的文件。由于微信并不提供这样的功能,我们只能找别的方法。可以尝试以下的方法:

    1、先获知微信的存储文件夹在哪:方法:点击微信电脑版左下角的三条横线,然后在打开的窗口里点击“文件管理”,右边就会看到微信的存储文件夹,然后再点击“打开文件夹”

    06613fbb2a7f72f8f35c9e86def10c6f.png

    2、点击下图中圈住的标志,然后再选择“详细信息”,把文件夹视图更改为“详细信息”视图:

    363656c5c1a09bd7e260eda7e0528c6d.png点击圈中的标志

    cafa7935e75bdf7d60e084c22b7efd6c.png选择“详细信息”

    3、在右上角的搜索栏上输入通配符:*.* 然后回车,开始查找所有的文件:

    1502b430e0e8714564e5fc1bf4e4110a.png

    4、搜索完成后,点击一下下方视图上的“修改日期”,这样系统就会根据文件的修改日期进行排序:

    6b37376c67240d9a705c1a4b470716ee.png

    5、选择指定时间范围的文件或文件夹,然后直接删除这些文件即可:

    6457f1dd05dc3ade9566ea67492d1c46.png

    采取以上的方法,可以在一定程度上删除指定时间范围的文件。不过请注意,由于文件的修改时间并非做得很准确,所以以上方法并非能准确的删除指定时间接收到的文件,因此,以上方法仅供参考,在删除文件之前,请先看清楚文件内容,必要的时候先做好备份,然后再做删除!

    在这里再次吐槽一下微信电脑版的文件管理模式。。。

    展开全文
  • 今天要讲一个简单的模式–builder模式。 你可能会觉得,builder模式有什么好讲的?本来我也这样觉得,但当我有幸拜读某位大神通过builder模式写了一个...对微信端传来的用户消息进行处理。 (2)需要解决的问题: 消...
  • 需要注意的是,在接收到微信推送的消息中tousername、fromusername的顺序与平台返回给微信(即要发送给微信用户)的交互信息中tousername、fromusername的值是相反的
  • 微信发送消息

    千次阅读 2013-03-11 10:46:50
    从前面的类图中可以看到,封装消息顺序是首先生成需要发送的媒体 对象,然后将媒体对象附加到消息对象中,接着建立请求对象,最后使用通信类发 送即可。 说明,本文是来自脚本之家,发到这里主要是分享一下,...
  • 主要介绍了微信小程序按顺序同步执行的两种方式,本文通过实例代码给大家讲解,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 微信小程序 模板消息

    2018-10-23 15:05:19
    点击选用后,进入模板消息配置页面,对于选用的模板,可以配置提交的关键词种类和顺序,如本文示例,选择了资源类型、资源概要、发布状态及发布时间。不能修改模板消息的标题,如果需要不同的消息标题,需自行申请,...
  • 在这篇文章中结合具体的示例来介绍在Jenkins中如何向企业微信群推送消息
  • 去年,宏论工作室介绍了基于itchat实现微信消息同步机器人的方法。现在,我们改用wxpy模块,以更简洁的代码实现微信消息同步。wxpy模块是在itchat模块的基础上再次封装,所以使用起来更简便。利用本文介绍的代码...
  • PHP实现推送微信模板消息

    千次阅读 2019-03-21 18:30:07
    然后拿到两个人的openid,prepay_id,和订单的一些信息传到我们封装的发送模板消息方法里,也就是我这里的$temarr数组里的值就是我们要发送的参数,这里要谨记,keyword序号,一定一定一定要按顺序写,从1开始,珊妹儿...
  • 这是一个仿微信联系人界面的按字母排序的一个例子,自定义控件来实现。
  • 主要介绍了微信小程序promsie.all和promise顺序执行的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
  • java 通过企业微信推送消息

    万次阅读 热门讨论 2018-08-24 10:20:43
    首先我们要知道企业微信推送消息的步骤,企业微信官方提供了多个API供我们调用,这里我们只讲我们需要的API; 企业微信的官方开放的API地址:https://work.weixin.qq.com/api/doc 推送企业微信消息分为这么几步: ...
  • 微信

    2016-09-13 15:33:39
     手机版多开是通过篡改微信客户端来实现的,稍有不慎就封号,而且经常出现闪退,操作时来会切换微信,太过于繁琐。  2、应接不暇  手动操作多个微信同时聊天,忙得不知道先聊哪一个,新加的好友根本没有时间...
  • 最近在学习微信小程序 其中看到他的事件冒泡的时候 发现了一个奇怪的地方 <view id="outer" bind:touchstart="handleTap1" capture-bind:touchstart="handleTap2" > outer view <view id="inner" ...
  • 微信模板消息推送遇到的坑

    千次阅读 2018-07-12 17:08:03
    这两天做微信公众号消息推送的时候,遇到了几个问题,在此记录下原因和解决办法,希望能帮助大家。 1、{"errcode":40037,"errmsg":"invalid template_id hint: [2ZVwjA0418ge29]"} 这个错误码微信API文档里没有...
  • 本文为博主原创 转载请注明出处 尊重笔者劳动成果 十分感谢 ... 被动消息回复本质是对微信服务器发过来消息的一次回复。因此需要开发者在5秒内做出响应 否则将会提示“该公众号暂时无法提供服务” 而客服消息其实是...
  • 微信公众号历史消息怎么设置?微信公众号菜单栏怎么添加历史消息选项? 微信公众号中想要让新加入的粉丝看到之前的消息,我们可以添加菜单栏选项,下面我们就来看看详细的设置方法,需要的朋友可以参考下。 1、登录...
  • 主要为大家详细介绍了微信小程序实现动态列表项的顺序加载动画,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python+itchat 实现微信撤回消息查看

    千次阅读 2019-07-06 10:17:24
    itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。 使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人。 安装 可以通过本命令安装itchat: pip install itchat 通过...
  • 微信企业号开发:消息类型与区别

    千次阅读 2015-07-22 14:50:24
    微信企业号的消息,分成两种,调用微信接口发送的消息在接口文档中叫做发送消息,这种消息是json格式的。在微信服务器给我们配置的URL post数据时发送的消息叫做接收消息和事件,需要加密解密,不需要调用微信接口,...
  • 杨老师表示之前用Itchat自动群发消息,但是现在网页版微信不能登录了,需要找个替代品,不然手工发送太浪费时间。 不知道有没有还不认识杨老师的,这是他的CSDN链接:https://blog.csdn.net/Eastmount 对于这个问题...
  • 企业微信自动回复 话术顺序回复 关键词回复 AI回复 自动通过好友 ,适合企业办公客服的自动接待。
  • 微信小程序【客服消息】功能开发

    万次阅读 热门讨论 2018-05-30 11:38:51
    最近在开发微信小程序,前后端均是我一个人负责,也着实受了不少苦网上客服消息开发挺多的,但是大多数说的都不详尽对新人来说有很多坑,最后还是根据官方说明文档一步一步走下来,写一份新人版的供大家参考,望大佬...
  • 官方文档给出的api中有那么几个重要信息,第一个微信是将手机发送给微信服务号的消息,以Xml 的形式又以Post 的请求方式下发给我的自己填写的URL上。 画个图好理解一下 那么有了这几个内容,我们就很容易获取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,321
精华内容 32,128
关键字:

微信消息顺序