![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Distributed/High Concurrency
文章平均质量分 66
luckystar2008
个人博客:https://tommy88.top
展开
-
ActiveMQ定时删除过期的Topic和Queue
<broker xmlns="http://activemq.apache.org/schema/core" schedulePeriodForDestinationPurge="10000"> <destinationPolicy> <policyMap>转载 2018-08-30 16:15:41 · 2181 阅读 · 0 评论 -
基于xmpp openfire smack开发之openfire介绍和部署[1] .
本文转载http://blog.csdn.net/shimiso前言Java领域的即时通信的解决方案可以考虑openfire+spark+smack。当然也有其他的选择。Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使用3.8.1版本,这个版本是当前最新的版本,而且网上可以找到下载的源代码。即时通信客户端可使用spark2.6.3,这个版本是...转载 2013-06-24 14:19:16 · 849 阅读 · 0 评论 -
基于xmpp openfire smack开发之smack类库介绍和使用[2]
本文转载http://blog.csdn.net/shimiso 关于Smack编程库,前面我们提到,它是面向Java端的api,主要在PC上使用,利用它我们可以向openfire服务器注册用户,发送消息,并且可以通过监听器获得此用户的应答消息,以及构建聊天室,分组,个人通讯录等等。下面我们写几个程序小例子测试一下。(1)登录操作[java] view plaincopy...转载 2013-06-24 14:34:03 · 1105 阅读 · 0 评论 -
zookeeper安装与配置
介绍ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现。参考:http://blog.csdn.net/u013068377/article/details/52620647http://blog.csdn.net/xuxiuning/article/details/51218941zookeeper官方文档:https://zo...原创 2018-09-21 16:30:17 · 469 阅读 · 0 评论 -
zookeeper客户端curator使用
curator简介curator是Netflix开源的一个zookeeper客户端,在原生API接口上进行了包装,解决了很多ZooKeeper客户端非常底层的细节开发。同时内部实现了诸如Session超时重连,Watcher反复注册、分布式计数器、分布式锁等功能,实现了Fluent风格的API接口,是使用最广泛的zookeeper客户端之一。Curator使用的链式编程风格。如果只需要zooke...原创 2018-09-21 16:30:53 · 2379 阅读 · 0 评论 -
ActiveMQ顺序消费消息+消息分组
简介Queue中的消息是按照顺序发送给Consumers的。然而,当你有多个Consumer同时从相同的Queue提取消息时,顺序将不能得到保证。因为这些消息时被多个线程并发的处理。但是,有时候保证消息的顺序是很重要的。例如,你可能不希望插入订单操作结束之前执行更新订单的操作。那么我们可以通过Exclusive Consumer和Message Groups来实现这一目的。独有消费者从Act...原创 2019-04-09 17:53:07 · 6007 阅读 · 7 评论 -
ActiveMQ之消息选择器(Message Selectors)
JMS Selectors用在获取消息的时候,可以基于消息属性和Xpath语法对消息进行过滤。JMS Selectors由SQL92语义定义。以下是个Selectors的例子: consumer = session.createConsumer(destination, "JMSType = 'car' AND weight > 2500");1:JMS Selectors表达式中,...原创 2019-04-09 17:53:50 · 1468 阅读 · 0 评论 -
ActiveMQ的消息重发与死信处理
概述在发生以下情形时,消息会给重发给客户端:使用了一个事务性的会话且调用了rollback()方法。在调用commit()方法前一个事务性的会话被关闭了。一个会话使用CLIENT_ACKNOWLEDGE的ACK模式,且调用了Session.recover()方法。一个客户端连接超时(可能正被执行的代码执行的时间超过配置的超时时间)。客户端可以通过ActiveMQConnection...原创 2019-04-09 17:54:26 · 2004 阅读 · 0 评论 -
ActiveMQ目的地之目的地选项
简介目的地选项(Destination Options)是一种向JMS使用者提供扩展配置选项的方法,而无需扩展JMS API。 使用创建使用者的目标名称中的URL查询语法对选项进行编码。Consumer Options选项名默认值描述consumer.dispatchAsynctruebroker是否应该异步的向Consumer发送消息consumer.exc...原创 2019-05-08 12:15:14 · 555 阅读 · 0 评论 -
ActiveMQ之定期清理离线的持久订阅者
概述通常,我们不希望系统中存在长时间离线的持久订阅者,因为Broker需要为它们保留它们订阅的topic的所有消息。而且随着时间的推移,将会导致达到存储限制,从而导致系统变慢。当然,你可以通过JConsole或Web Console等管理工具来手动取消不活跃的持久订阅者。但显然可以采取更多措施来帮助管理。过期消息一些应用程序发送的消息有一定的过期时间。如果这些消息存储在Broker上供离线...原创 2019-05-08 12:16:45 · 2683 阅读 · 0 评论 -
ActiveMQ之慢消费者处理
简介慢消费者在非持久性主题上会出现问题,因为它们会强制broker为它们在内存保留旧消息。一旦填满,就会导致broker放慢生产者的速度,导致快的消费者也会变慢。目前,有一个策略可以让你配置broker除了prefect bufer之外还将为消费者保留的最大匹配的消息数。在达到此最大值后,当新消息进入时,旧消息将被丢弃。这将允许你在内存中保留当前消息并继续向慢消费者发送消息,但会丢弃旧消息。...原创 2019-05-08 12:18:26 · 3913 阅读 · 0 评论 -
ActiveMQ之Prefect机制
简介ActiveMQ的设计目标是成为一个高性能的消息总线。这意味着使用SEDA架构可以异步执行尽可能多的工作。 为了有效利用网络资源,Broker利用“推送”模型向消费者发送消息。 这可确保消费者始终拥有准备处理的消息的本地缓冲区。 替代方案是让消费者明确地从Broker那里提取消息。 单独提取消息不是非常有效,并且会增加每个消息的延迟。但是,在不限制推送给消费者的消息数量的情况下,客户端的资...原创 2019-05-08 12:21:53 · 367 阅读 · 0 评论 -
ActiveMQ之订阅恢复策略
简介生产者在某个topic发送了多条消息后,这个时候非持久订阅者才订阅,那么它是不能获取之前生产者发送的信息的。或者,由于网络问题,非持久类型的消费者处于非活跃状态,无法接收到生产者发送的消息。使用消息恢复策略,可以解决上面的问题。ActiveMQ目前支持一个定时或固定大小的恢复缓冲区,在你连接到broker后,在一段时间内的消息会重新发送给订阅者。ActiveMQ提供的恢复策略Fixed...原创 2019-05-11 14:56:11 · 1997 阅读 · 0 评论 -
ActiveMQ处理积压的消息
如果消费者变为慢速消费者,那么后面可能会导致消息积压,导致生产者速度也变慢,甚至停止。我们可以配置消息的过期时间,并设置消息过期丢弃策略,以及使用死信队列来处理消息的积压。为持久化消息设置过期时间ActiveMQ提供了一个timeStampingBrokerPlugin插件,通过此插件,我们可以为持久化消息设置过期时间。参考:http://activemq.apache.org/timesta...原创 2019-05-11 14:58:01 · 6211 阅读 · 1 评论 -
ActiveMQ之消息分发策略
分发策略queue的分发策略可插拔的分发策略只适用于topic。queue的分发策略比较固定:轮询(默认)或按照严格顺序。同时我们也应该了解prefect的意义。ActiveMQ的prefetch缺省参数是针对处理大量消息时的高性能和高吞吐量而设置的,因此默认的prefect值很大,默认的分发策略会尽快尝试将预取缓冲区填满(prefetch buffers)。然而在有些情况下,例如只有少量...原创 2019-05-11 15:00:13 · 3352 阅读 · 0 评论 -
ActiveMQ目的地特性之组合目的地
从ActiveMQ1.1开始,支持一种被称为组合目标的技术。这允许使用单个虚拟的JMS目的地来表示一个JMS目的地的集合。例如,你可以使用组合目的地在一个操作中将消息发送到12个物理队列。或再一次操作中将消息发送到一个主题和一个队列。可以在创建目的地或将目的地注册到JNDI时,使用逗号分隔将多个目的地组合起来。比如:FOO.A,FOO.B,FOO.C表示3个不同的目的地。这可以与队列或...原创 2019-05-11 15:02:44 · 667 阅读 · 0 评论 -
ActiveMQ静态网络连接
前言使用静态网络连接(static networkConnector)可以将多个broker连接起来,作为一个集群对外提供服务。我们假定有amq1和amq2配置了静态网络连接,那么当一个消费者连接到amq2,当生产者发送消息到amq1时,amq2将会作为amq1的一个消费者,将消息转移到amq2,然后投递给连接到amq2的消费者;反之亦然。对于queue,由于一条消息只能被一个消费者消费,所以...原创 2019-08-19 09:38:46 · 759 阅读 · 0 评论 -
spring结合activemq消息过期配置
包括queue和topic的消息过期配置。发送消息使用的spring-jms提供的JmsTemplate。queue的配置 设置pubSubDomain为false,默认即为false。需要将explicitQosEnabled设置为true,过期时间要生效依赖它。timeToLive即为过期时间,本例中设置的是10秒过期。topic的配置 设置pubSubDomain为true,表示...原创 2018-09-15 10:33:14 · 2617 阅读 · 0 评论 -
spring结合activemq使用
spring结合activemq使用依赖如下: <dependency> <groupId>${spring.groupId}</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</vers...原创 2018-09-15 10:31:46 · 171 阅读 · 0 评论 -
activemq集群之master-slave+zookeeper
参考ActiveMQ的集群方案对比及部署本文使用的是activemq的master slave集群,俗称高可用,并没有考虑负载均衡。使用Zookeeper来管理各个broker.由于zookeeper选举原则是2N+1,所以至少要有3个broker。否则会提示“Not enough cluster members when using LevelDB replication”。这样就没法选...原创 2018-08-31 10:10:03 · 414 阅读 · 0 评论 -
使用Redis实现分布式Session共享
分布式系统中,sessiong共享有很多的解决方案,其中托管到缓存中应该是最常用的方案之一,Spring Session官方说明 Spring Session provides an API and implementations for managing a user’s session information.如何使用1、引入依赖<dependency> ...原创 2018-09-01 09:56:42 · 1149 阅读 · 0 评论 -
dubbo-admin安装与使用
在dubbo加入apache后,github地址也变了。dubbo-admin需要从https://github.com/apache/incubator-dubbo-ops下载。 将项目克隆到本地后,可以看到dubbo-admin模块。 值得注意的是,最新的dubbo-admin集成了springboot,可以打包为jar运行。 下载后的项目名称为incubator-dubbo-o...原创 2018-09-01 09:58:19 · 9747 阅读 · 0 评论 -
为dubbo接口增加IP白名单
在开发dubbo接口时,有时可能会限制接口的访问,ip白名单即是一种。在dubbo中,通过扩展Filter接口,可以实现IP白名单的功能。先定义一个配置IP白名单的bean/** * Created by j.tommy on 2017/11/4. */public class IPWhiteList { private boolean isEnabled; // 是否启用白...原创 2018-09-01 09:59:46 · 1346 阅读 · 4 评论 -
ELK搭建手册
参考: https://my.oschina.net/itblog/blog/547250?p=2&temp=1503478503046#blog-comments-listhead插件安装参考: https://wenku.baidu.com/view/1c61ece6162ded630b1c59eef8c75fbfc77d94e5.html下载软件elasticse...原创 2018-09-01 10:07:18 · 2232 阅读 · 0 评论 -
ICEBOX使用示例
系统安装ice3.4.1,并配置环境变量;定义slice文件[[ "java:package:com.hhly.tel.ice"]]module book { interface OnlineBook { void bookTick(string name,double price,string content); }; interface ...原创 2018-09-06 09:45:06 · 2037 阅读 · 0 评论 -
netty自定义编码器和解码器(粘包处理)
这里的实现方式是:将消息分为两部分,也就是消息头和消息尾,消息头中写入要发送数据的总长度,通常是在消息头的第一个字段使用int值来标识发送数据的长度。 首先我们写一个Encoder,我们继承自MessageToByteEncoder ,把对象转换成byte,继承这个对象,会要求我们实现一个encode方法:@Overrideprotected void encode(ChannelHa...原创 2018-09-12 09:49:02 · 11111 阅读 · 5 评论 -
Netty使用DelimiterBasedFrameDecoder解决TCP粘包拆包问题
通过对DelimiterBasedFrameDecoder的使用,我们可以自动完成分隔符为结束标识的消息的解码。下面的例子中,将$_作为分隔符。服务端代码:/** * 使用DelimiterBasedFrameDecoder解码器解决TCP粘包/拆包问题。 * * @author j.tommy * @version 1.0 * @date 2017/11/17 */...原创 2018-09-12 09:50:57 · 1835 阅读 · 0 评论 -
Netty固定长度解码器
FixedLengthFrameDecoder是固定长度解码器,它根据指定的长度自动对消息进行解码,开发者不需要考虑TCP拆包/粘包问题。 下面通过一个例子进行说明。服务端: 在服务端的ChannelPipleline中增加FixedLengthFrameDecoder,长度设置为20,然后依次增加字符串解码器和自定义的EchoServerHandler。 /** * 使用Fixe...原创 2018-09-12 09:51:52 · 1885 阅读 · 0 评论 -
使用Netty对POJO对象进行序列化
使用JDK的ObjectInputStream和ObjectOutputStream可以实现java对象的序列化和反序列化(只要被序列化的POJO对象实现Serializable接口)。在不需要考虑跨语言,并且对序列化的性能要去不苛刻时,JDK默认的序列化机制是最明智的选择之一。下面的例子中,我们使用Netty的ObjectDecoder和ObjectEncoder对请求和应答对象进行序列...原创 2018-09-12 09:52:49 · 1002 阅读 · 1 评论 -
Netty使用Protobuf编解码
Protobuf是一个灵活、高效、结构化的数据序列化框架,相比于XML等传统的序列化工具,它更小、更快、更简单。Protobuf支持数据结构化一次可以到处使用,甚至跨语言使用,通过代码生成工具可以自动生成不同语言版本的源代码,甚至可以在使用不同版本的数据结构进程间进行数据传递,实现数据结构的前向兼容。下面结合一个例子看看在Netty如何使用Protobuf对POJO对象进行编解码。1.Pr...原创 2018-09-12 09:54:04 · 1965 阅读 · 1 评论 -
使用Netty解决TCP粘包-拆包问题
TCP粘包和拆包TCP底层并不知道上层业务数据的具体含义,它会根据缓冲区的实际情况进行包的拆分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能将多个小的数据包封装成一个大的数据包发送,这就是所谓的TCP粘包/拆包问题。TCP粘包/拆包的原因1.应用程序写入的字节大小大于套接字发送缓冲区大小; 2.进行MSS大小的TCP分段; 3.以太网帧的paylo...原创 2018-09-12 09:55:07 · 363 阅读 · 0 评论 -
Netty版本时间服务器
本篇文章与前几篇文章BIO编程、AIO编程、伪异步IO编程、NIO编程一起,作为对比的Netty实现,并未考虑TCP粘包/拆包的问题。 由阻塞I/O,伪异步I/O,非阻塞I/O,异步非阻塞I/O到Netty实现相同功能的代价,以及使用其他方式的弊端。下面仍以时间服务器为例进行说明。 服务端代码:/** * @author j.tommy * @version 1.0 * @d...原创 2018-09-12 09:55:44 · 493 阅读 · 0 评论 -
封装ICE客户端
来自《ICE权威指南》一书中的Ice的一个工具类。 IceClientUtil.java:package com.lucky.interf.util;import Ice.Communicator;import Ice.ObjectPrx;import java.lang.reflect.Method;import java.util.HashMap;import java.u...原创 2018-09-13 09:43:18 · 960 阅读 · 0 评论 -
多个tomcat session共享
这里使用的是tomcat的广播机制实现的。 这里使用Nginx+2台tomcat做测试,2台tomcat端口分别为8080和8081。nginx配置 tomcat修改tomcat1: 修改server.xml,找到<Engine标签,增加属性jvmRoute="tomcat1",将<Cluster放开。 如图: tomcat2: 同样,只是将jv...原创 2018-09-11 10:13:17 · 1006 阅读 · 0 评论 -
socket.io数据推送
参考:基于netty-socketio的web推送服务、Spring Boot实战之netty-socketio实现简单聊天室(给指定用户推送消息)、socket.io 中文文档socketio简介 Socket.io是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。它会自动根据浏览器从WebSocket、AJA...原创 2018-09-15 10:27:03 · 1920 阅读 · 0 评论 -
ActiveMQ集群搭建
简述activemq提供了多种方式来保证activemq的可靠性。包括:纯Master/SlaveShared File System Master SlaveJDBC Master SlaveBroker clusters-静态Broker clusters-动态(基于组播,动态发现brokers)但单纯的使用上面的一种没法既达到高可用,同时有具有负载均衡的能力。生产环境集...原创 2019-08-19 09:41:43 · 1220 阅读 · 0 评论