科技新闻

RocketMQ 分布式事务消息过程分析

岁酱吖の 提交于 2020-02-29 12:29:49
Half Message(半消息) 是指暂不能被Consumer消费的消息 。Producer 已经把消息成功发送到了 Broker 端,但此消息被标记为 暂不能投递 状态,处于该种状态下的消息称为半消息。需要 Producer 对消息的 二次确认 后,Consumer才能去消费它。 消息回查 由于网络闪段,生产者应用重启等原因。导致 Producer 端一直没有对 Half Message(半消息) 进行 二次确认 。这时 Brock 服务器会 定时扫描 长期处于半消息 的消息 ,会 主动询问 Producer 端 该消息的最终状态( Commit或者Rollback ),该消息即为 消息回查 。 A服务先发送个Half Message给Brock端,消息中携带 B服务 即将要+100元的信息。 当A服务知道Half Message发送成功后,那么开始第3步执行本地事务。 执行本地事务(会有三种情况1、执行成功。2、执行失败。3、网络等原因导致没有响应) 如果本地事务成功,那么 Product主动向 Brock服务器发送Commit,这样B服务就可以消费该message。 如果本地事务失败,那么 Product主动向 Brock服务器发送Rollback,那么就会直接删除上面这条半消息。 如果因为网络等原因迟迟没有返回失败还是成功,那么会执行RocketMQ的回调接口

Java架构直通车——ThreadLocal实现RabbitMQ消息的批量发送

做~自己de王妃 提交于 2020-02-29 12:25:15
文章目录 引入 什么是ThreadLocal 使用ThreadLocal 引入 之前,我们完成了 单个消息的发送,以及单个消息发送的多线程池化 。 这里,我们继续完成批量发送消息的封装。 因为rabbitMq本身是不支持批量发消息的,所以我们可以直接使用上文所创建的连接池来发送。 最简单的代码是这样的: # ProducerClient . class @Override public void send ( List < Message > messages ) throws MessageRuntimeException { messages . forEach ( message - > { message . setMessageType ( MessageType . RAPID ) ; } ) ; rabbitBroker . sendMessages ( messages ) ; } # RabbitBrokerImpl . class @Override public void sendMessages ( List < Message > messages ) { messages . forEach ( message - > { sendKernel ( message ) ; } ) ; } 这里使用ThreadLocal

国际化程序实现原理

笑着哭i 提交于 2020-02-29 12:04:37
文章目录 国际化问题简介 Locale 类 Locale 类的构造方法: 举例:(实例化 Locale 类对象) 读取资源文件:ResourceBundle 举例:使用 ResourceBundle 类读取内容 实现国家化程序 举例:(代码实现) 消息格式化 举例:(修改资源文件) 举例:(格式化文本实现国际化) 所谓的国际化的程序指的是同一个程序代码可以根据不同的国家实现不同的语言描述,但是程序处理的核心业务是相同的 国际化问题简介 现在假设有一款世界都认可的企业管理平台,那么这个企业的老板决定将这个产品呢推广到全世界各个大型的上市公司,于是这些公司可能来自于:中国、美国、德国等等等等,那么在这样的情况下,首先要考虑的问题是什么呢? 通过分析之后可以发现,如果要想实现国际化的程序开发,那么要解决的问题就在于以下两点: 如何可以定义保存文字的文件信息 如何可以根据不同的区域语言的编码读取指定的资源信息 Locale 类 通过分析可以发现,如果要想实现国际化,那么首先需要解决的就是不同国家用户的区域和语言编码的问题,而在 java.util 包中提供有一个专门描述区域和语言编码的类: Locale,而后可以主要可以使用 Locale 类中的两个构造方法进行实例化 Locale 类的构造方法: 构造方法:public Locale(String language) 构造方法

学习:Linux之共享存储

醉酒当歌 提交于 2020-02-29 11:17:06
涉及的书籍:《UNIX环境高级编程_第二版中文》、《操作系统精髓与设计原理第7章》 一、共享内存介绍 1.共享存储(共享内存)—》最快的IPC,共享存储是不属于任何一个进程的; 2.管道是通过文件描述符指向内存上的空间,消息队列是通过内核对象指向内存上的空间,无论是管道还是消息队列,涉及的进程都需要维护一份数据,这就涉及拷贝操作。 3.共享存储是通过指向内核空间中的内核对象所指向的内存空间实现的,这个共享空间叫做临界资源。(见图) 二、共享内存有关的函数 题:A进程读取用户数据,B进程将读取的数据全部转换为大写,然后输出 三、分类比较 四、操作系统的内存管理方案介绍----》参考书籍:《操作系统精髓与设计原理第7章》 来源: CSDN 作者: 飞流直下 链接: https://blog.csdn.net/weixin_44737923/article/details/102719160

C# json字符串解析含有双引号

ぐ巨炮叔叔 提交于 2020-02-29 10:49:08
最近在维护一个C#项目,一个ajax请求列表数据没有展示数据。 第一反应就是查看请求有没有数据,于是到后台打断点发现有数据,但是页面没有展示。 此时觉得有点诡异,于是在ajax的error方法里面设置断点,居然进来了,于是打印错误消息,发现是json转换异常。 于是想到可能是有特殊字符,定位到315,发现是字符串中含有双引号。 解决办法想到了在JSONARRAY先将字符串encode,然后在js中在decoder。 经过测试问题解决了!!! 来源: https://www.cnblogs.com/java-chanjuan/p/6580943.html

RabbitMQ 系列(一)AMQP协议

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-29 09:59:53
介绍 RabbitMQ 前,有必须先了解一下 AMQP 协议。 AMQP 协议是一个高级抽象层消息通信协议, RabbitMQ 是 AMQP 协议的实现。它主要包括以下组件: 1. Server(broker): 接受客户端连接,实现 AMQP 消息队列和路由功能的进程。 2. Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Virtual Host 3.Exchange:接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。ExchangeType决定了Exchange路由消息的行为,例如,在RabbitMQ中,ExchangeType有direct、Fanout和Topic三种,不同类型的Exchange路由的行为是不一样的。 4. Message Queue :消息队列,用于存储还未被消费者消费的消息。 5.Message: 由Header和Body组成,Header是由生产者添加的各种属性的集合,包括Message是否被持久化、由哪个Message Queue接受、优先级是多少等。而Body是真正需要传输的APP数据。 6. Binding:Binding 联系了 Exchange 与 Message Queue 。 Exchange

MTOM效率测试

喜你入骨 提交于 2020-02-29 08:13:09
MTOM是一种消息编码方式,它的目的是优化SOAP消息的编码,以减小体积,提高传输速度。如果你对其不清楚,可以参考另外一篇文章 http://www.cnblogs.com/chenxizhang/archive/2010/04/09/1708621.html 这一篇,我们主要用实例来看看到底它在性能方面有何表现 我们先做一些准备工作,编写了一个接口和服务 1. 接口 using System.ServiceModel; namespace Services { [ServiceContract] public interface IHelloService { [OperationContract] byte[] GetData(); } } */ /*--> */ 2.服务 namespace Services { public class HelloWorldService:IHelloService { #region IHelloService 成员 byte[] IHelloService.GetData() { return new byte[10000]; } #endregion } } */ /*--> */ 注意,我们这里的服务很简单,就是直接返回一个长度为10000的字节数组。 接下来编写宿主和客户端 3.宿主 using System; using

有赞绑定微信公众号注意事项

烂漫一生 提交于 2020-02-29 06:28:46
针对微信公众号已经开启开发者模式 整理公众号自动回复关键字列表和自定义菜单 有赞后台-店铺设置-微信账号-微信授权 授权后,公众号的自定义菜单关键字自动回复实效;所以在有赞后台未设置自定义菜单和关键字之前,为了不影响粉丝体验,可以先在微信后台授权管理中取消对有赞授权,然后通过微信接口重新生成一次公众号自定义菜单 有赞后台-微信-自定义菜单 有赞后台自定义菜单创建成功后,需要重新进行微信授权,然后在有赞后台开启自定义菜单 有赞后台-应用与营销-插件中心 配置插件中心,就是微信后台开发者中心监控用户消息和事件的url 根据实际需求设置转发关键字 启用需要转发消息监控,注意字符信息只针对字母字符,汉字需要设置转发关键字才能触发插件 来源: oschina 链接: https://my.oschina.net/u/266279/blog/616845

微信公众平台素材编辑与自动回复图文教程

南楼画角 提交于 2020-02-29 06:05:28
一、素材编辑 点 击进入素材管理,我们可以看到界面的左边是素材分类包括图文消息、图片、语音、视频,右边是内容编辑框,由于图片、语音、视频都是很简单的上传文件管理, 所以我们重点讲解一下图文消息的编辑。图文消息分为“单图文消息”和“多图文消息”,他们的效果对应的效果可以看看下面的图片。 1、单图文消息编辑 我们先点击“单图文消息”按钮,进入信息编辑界面后我们看到左边是消息的预览效果,这也是消息发到微信后的效果,右边是消息内容编辑框,包括标题、封面、摘要、正文、原文链接。由于推送到手机的消息只显示标题、封面和摘要,所以我重点说说这3个。 标题:标题要简明扼要,能快速锁定读者眼球。减少形容词,把内容的核心凸显出来。 封面:封面图片在推送的消息里面占有很大的内容面积,所以选择封面图片的时候一定要能贴合主题,切忌放些花俏绚丽空洞的图片。 【技巧】图片大小最好设计为700像素×300像素,这样出来的效果最好最清晰,当然如果你找不到这么大的图片,可以按照720像素×400像素这个比 例来调整图片尺寸,例如500像素×278像素 或 300像素×167像素 都可以,这样可以保证出来的封面图片能完整显示。如果使用其他尺寸,可能导致只显示图片的中间部分,不能完整显示出来。 摘要:摘要只在编辑单图文消息状态下显示,在编辑多图文消息时是不会出现的。但不要小看摘要,它在单图文消息里占有不少展示比例

IOS远程推送

痞子三分冷 提交于 2020-02-29 06:05:16
1、从一张很火的图说起 搜索IOS远程推送,你总能看到一张如下的流程示意图,因为这张图确实很火,所以我也将它引用在此: 这张图示意的很清晰,大致意思是这样:你的应用服务端将消息发送到apple的APNS服务器,APNS服务器将消息推送到指定的Iphone,最后由Iphone负责将消息推送至你的APP。在此先不说这个过程是如何实现的,仅仅看这个流程,你可能会觉得,在你们服务端和客户端之间增加了一个apple的APNS,不是增加开发者的负担么?其实结果恰恰相反,因为apple对推送的统一管理,使我们开发者的工作变得异常简单。 2、服务端如何连接到客户端的 如果你是做android开发的,你一定非常了解长链接与心跳包。事实上,大部分的android应用的推送也确实是通过长链接来实现的。因为android系统的开放性,APP是很容易做到自启动和后台长链接的,而心跳验证,就是始终保证长链接属于接通状态,然后由服务端直接推送消息。如果IOS开发者也采用这种思路,就十分困难了,在IOS中想要保持一个APP服务始终不被系统杀死,我只能说太难了。通过上面的流程图,对比android的推送思路,我们很容易明白,IOS中其实也始终有一个长链接,那就是系统本身,这个长链接始终与APNS服务器相连,然后统一管理所有应用程序的推送。 3、这是IOS推送机制的优势? 下面的这些,只是我个人的一些看法