- 浏览: 59134 次
- 性别:
- 来自: 北京
最新评论
文章列表
Mysql 全局ID的实现
- 博客分类:
- mysql
工作中需要一个全局的自增的主键ID,网上找到一种mysql的实现方式(redis考虑到现在集群的不稳定和持久化的问题,暂时没有考虑那种方案)
网上方案如下:
因为MySQL本身支持auto_increment操作,很自然地,我们会想到借助这个特性来实现这个功能。Flicker在解决全局ID生成方案里就采用了MySQL自增长ID的机制(auto_increment + replace into + MyISAM)。一个生成64位ID方案具体就是这样的:先创建单独的数据库(eg:ticket),然后创建一个表:
CREATE TABLE Tickets64 (
...
ConcurrentHashMap
ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度 ...
举个例子来说,典型的使用步骤:
发送端:
1. 启动ActiveMQ时,也启动jetty(即activemq.xml中有import jetty.xml),此时jetty中运行了一个ActiveMQ自带的http文件服务器
2. 使用tcp://localhost:61616?jms.blobTransferPolicy.defaultUploadUrl=http://localhost:8161/fileserver/创建connection,然后创建session和producer
3. 使用如下代码发送文件:
BlobMes ...
网络连接模式(network connector)
针对海量消息所要求的横向扩展性和系统的高可用性,ActiveMQ提供了网络连接模式的集群功能。简单的说,就是通过把多个不同的broker实例连接在一起,作为一个整体对外提供服务,从而提高整体对外的消息服务能力。通过这种方式连接在一起的broker实例之间,可以共享队列和消费者列表,从而达到分布式队列的目的。
拓扑结构
几种不同的ActiveMQ部署拓扑结构(嵌入、主从复制、网络连接):
配置示例
在activemq.xml的broker节点内添加:
<networkConnectors>
< ...
ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。
ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEntry 用来封装映射表的键 / 值对;Segment 用来充当锁的角色,每个 Segment 对象守护整个散列映射表的若干个桶。每个桶是由若干个 HashEntry 对象链接起来的链表。一个 ConcurrentHashMap 实例中包含由若干个 Segment 对象组成的数组。
HashEntry 类
HashEntry 用来封装散列映射表中的键值对。在 HashEntry ...
有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。
类似这种需求,ActiveMQ提供了一种broker端消息定时调度机制。
我们只需要把几个描述消息定时调度方式的参数作为属性添加到消息,broker端的调度器就会按照我们想要的行为去处理消息。
一共有四个属性:
Property name
type
description
AMQ_SCHEDULED_DELAY
DefaultMessageListenerContainer是一个用于异步消息监听的管理类。
DefaultMessageListenerContainer最简单的实现逻辑,一个任务执行器,执行任务(即消息监听)。
DefaultMessageListenerContainer实现的主要原理是,通过内部初始化建立的一个taskExecutor(默认是 SimpleAsyncTaskExecutor)用于执行消息监听的任务(AsyncMessageListenerInvoker)。
这里默认的任务执行器是SimpleAsyncTaskExecutor,这个执行器的缺点是不会重用连接,也 ...
PooledConnectionFactory实现ConnectionFactory接口。为因JmsTemlate每次发送消息时都会重新创建连接,创建connection,session,创建productor。这是一个非常耗性能的地方,特别是大数据量的情况下。因此出现了PooledConnectionFactory。这个类只会缓存connection,session和productor,不会缓存consumer。因此只适合于生产者发送消息。那为什么不缓存consumer呢?官方解释是由于消费者一般是异步的,也就是说,broker代理会把生产者发送的消息放在一个消息者的预取缓存中。当消息者准备 ...
转载自:http://windows9834.blog.163.com/blog/static/27345004201311841121335/
这是官方推荐要看的原文的翻译:http://codedependents.com/2009/10/16/efficient-lightweight-jms-with-spring-and-activemq/
异步性(asynchronicity),是高伸缩性系统的首要的 设计 原 ...
转载自:http://windows9834.blog.163.com/blog/static/273450042013119111750498/
官方:http://activemq.apache.org/message-cursors.html 在Activemq以前的版本中,broker会把待发送的消息保存在内存中(在非持久化消息的情况下)。这种方式的缺陷是当消费者消费的速度赶不上生产者的发送速度时,会在 broker的内存中积攒大量的消息,当达到一个限额后,broker就不再接收消息。这时生产者就被阻塞了,直到broker将内存中的消息被消费后才能继续发送。 ...
转载自:http://windows9834.blog.163.com/blog/static/2734500420131192144239/
对官方文档:http://activemq.apache.org/producer-flow-control.html 进行翻译。在ActiveMQ4.x版本中,使用了流量控制措施,流量控制是用TCP流量控制实现的。因生产者受流量限制 ...
转载自 http://windows9834.blog.163.com/blog/static/2734500420131195224532/
官方文档:http://activemq.apache.org/redelivery-policy.html在事务控制里抛出异常,txManager会进行rollback处理.(在activeMQ里,消息默认会redelivery到客户端6次,如果继续异常,消息会放到deadletter queue里(ActiveMQ.DLQ))。在以下三种情况中,消息会被再次传送给消费者:
1.在使用事务的Session中,调用rollback()方法; ...
JmsTemplate就是Spring用来解决JMS冗长重复代码的方案,它可以创建连接,获取会话,发送和接收消息,使用它之后,使得你可以专注于构建要发送的消息及处理收到的消息。
<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"> <property name="brokerURL">
<value>failover://(tcp ...
我们知道mysql中是不支持sequence的,一般是建表的时间使这个字段自增。
如 create table table_name(id int auto_increment primary key, ...);
或者alter table table_ame add id int auto_increment primary key //字段,一定设置为primary key
或者重设自增字段的起步值 alter table table_name AUTO_INCREMENT=n
但是我们在oracle中经常使用 ...
公司想把图片从阿里云的服务器上迁移到自己的服务器,顺便建立一套新的图片存储系统。
开始打算使用FastDFS,但是FastDFS有自己的文件名生成规则,我们网站已经有了很多图片,如果每个图片都重新生成的话,工作量比较大。由于时间原因,临时采用了nginx来实现。
采用了3台服务器,每台服务器上都安装了nginx。用户访问相应图片时,根据自己定义的nginx location的hash规则,2012年的图片映射到一台机器上,2013年的映射到另一台机器上。
由于nginx已经支持了web缓存,考虑到图片可能会被临时替换,所以需要一个可以清除缓存的组件ngx_cache_puge。 ...