Java

Springcloud 应用(1)

Submitted by Lizhe on Thu, 07/06/2017 - 16:45

首先还是推荐你阅读一下 马丁福勒大爷的网站上的这篇文章

https://martinfowler.com/articles/microservices.html

下面我构建一个helloworld

首先是服务注册中心

pom.xml

redis 入门 (5) 计数器

Submitted by Lizhe on Tue, 07/04/2017 - 10:22

这个计数器跟hbase的计数器差不多

package redissample.incr.sample;

import redis.clients.jedis.Jedis;
import redissample.factory.JedisFactory;

public class IncrSample {
    public static void main(String args[]){
        Jedis jedis = JedisFactory.getJedis();
        jedis.incr("age");
        System.out.println(jedis.get("age"));
    }
}
 

 

redis 入门 (4) 持久化

Submitted by Lizhe on Mon, 07/03/2017 - 17:16

redis 有4种持久化方式

  • Snapshotting 也是默认方式
  • Append-only file(缩写aof)
  • 虚拟内存方式
  • Diskstore

 

这里只讨论常用的前两种, 第三种虚拟内存已经过时,第四种Diskstore基于B-tree实现,还处于alpha阶段

 

1. Snapshotting

redis会生成一个名问dump.rdb的文件作为快照, 这种方式每次都会将内存中的全部数据写入磁盘,所以性能开销会比较大

你可以通过配置文件添加如下内容

save 60 10 如果60秒内有10次或10次以上写入,则生成快照
stop-writes-on-bgsave-error no

如果后台数据持久化动作失败,是否停止接受写操作

http 长连接 (web socket)

Submitted by Lizhe on Fri, 06/30/2017 - 15:36

http实际上是一种应用协议, 它使用tcp协议作为传输协议

http1.0中, 只使用tcp的短连接, 也就是每次发起一次请求,然后中断连接

http1.1会使用长连接, 也就是说减少tcp请求次数,使用几次或一段时间之后再断开tcp连接, 这里注意 "长连接" 的连接指的是tcp连接

如果你查看tomcat的配置文件(我这里是tomcat8)会发现tomcat使用的是1.1

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

这里我的重点在于, 我需要解决 "如何从服务器像浏览器端推送数据" 的问题

按照过去的思路是, request+response 轮询, 也就是每秒请求一次数据, 发生更新就同步到页面上

这样需要大量的请求和响应,而且没法保证实时性(即使是1秒延迟也不是实时的)

这种需求一般会被用在例如 管理界面 股票查询 竞拍系统 上

下面我使用一个多用户在线聊天的界面来演示如何从服务器端使用web socket推送数据到浏览器( real time )

spring integration 入门例子 Aggregator

Submitted by Lizhe on Fri, 06/30/2017 - 10:10

Aggregator会将多个消息归并成为一条消息,然后发送给下一个节点, 基本上就是splitter的反作用

不过aggregator用起来要比splitter麻烦一些,因为你要明确

哪些消息会被分成一组,然后成为一条消息 (聚合规则)

什么时候停止聚合,把这条归并后的消息发送出去 (发送规则)

这次我们先看这两部分代码

spring integration 入门例子 Transformer

Submitted by Lizhe on Thu, 06/29/2017 - 16:47

与filter类似, transformer也有一个入口和一个出口, 不同的是filter返回一个布尔值,用来过滤消息

transformer 返回一个对象,用于修改消息中的内容

首先还是一个输出用的接口

package name.lizhe.transformer;

public interface HelloService {
    void sayHello(String name);
}
 

输出的实现

package name.lizhe.transformer;