花辭

風月不瘦,雖以千年後。


  • 首頁

  • 關於

  • 標籤

  • 分類

  • 歸檔

  • 站點地圖

  • 公益404

Akka调度器和远程调用

發表於 2017-02-01 | 分類於 入门教程 | | 閱讀次數:

在没有为Actor作配置的情况下,每一个ActorSystem将有一个缺省的派发器。该缺省派发器可以被配置,默认是使用指定的default-executor的一个Dispatcher

Akka Dispatcher应用

配置文件

application.conf 内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
DispatcherExample{
defaultDispatcher {
type = Dispatcher
executor = "fork-join-executor"
fork-join-executor {
parallelism-min = 2
parallelism-factor = 2.0
parallelism-max = 6
}
}
defaultDispatcher1 {
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor {
core-pool-size-min = 1
core-pool-size-factor = 2.0
core-pool-size-max = 6
}
throughput = 2
}
}
閱讀全文 »

Akka介绍与入门示例

發表於 2017-02-01 | 分類於 入门教程 | | 閱讀次數:

Akka介绍

Akka是用scala编写的actor模型框架。它在使用中不需要锁和多线程,每个Actor在独立空间中进行数据操作,Actor之间并不直接通信,而是通过了消息来相互沟通,每一个Actor都把它要做的事情都封装在了它的内部,操作都是异步进行的。
理论上来讲,每一个Actor都拥有属于自己的轻量级线程,保护它不会被系统中的其他部分影响.因此,我们在编写Actor时,就不用担心并发的问题, 通过Actor能够简化锁以及线程管理.
它可以用于高并发、分布式场景,需要注意的是,Akka消息的传递不保证绝对可靠投递,当然这带来了好处是整个实现简单.

Actor具有以下的特性

  • 提供了一种高级的抽象,能够封装状态和操作.简化并发应用的开发.
  • 提供了异步的非阻塞的/高性能的事件驱动模型
  • 超级轻量级的线程事件处理能力.
閱讀全文 »

Akka分布式计算应用

發表於 2017-02-01 | 分類於 入门教程 | | 閱讀次數:

介绍Akka-Cluster前 需要先说一下Akka-Remoting.

Akka-Remoting一种ActorSystem之间Actor对Actor点对点的沟通协议.通过Akka-Remoting来实现一个ActorSystem中的一个Actor与另一个ActorSystem中的另一个Actor之间的沟通.在Remoting功能之后,Akka又发展了集群Cluster功能.
Akka-Cluster是基于Akka-Remoting之上的新一代分布式运算环境,所以Remoting已经成为了Akka-Cluster的内部支持功能,在生产环境中的分布式运算应该尽量使用Akka-Cluster; Akka-Cluster可以在一部物理机或一组网络连接的服务器上搭建部署.

简单来说Akka-Cluster将多个JVM连接整合起来,实现消息地址的透明化和统一化使用管理,集成一体化的消息驱动系统.最终目的是能够把一个大型程序分割成多个子程序,然后部署到很多JVM上去实现程序的分布式并行运算.更重要的是:Cluster的构建过程与Actor编程没有牵连,当Cluster把多个ActorSystem集合成一个统一系统后,我们可以用在单一ActorSystem里编程的习惯方式编写分布式运算程序.由于在单一机器上就可以配置多个节点形成一个集群,我们开发的分布式程序可以在单机或多机群上运行,不同的只是如何部署和配置集群环境.

閱讀全文 »

Akka与Spring整合应用

發表於 2017-02-01 | 分類於 入门教程 | | 閱讀次數:

本篇集合Akka应用-分布式计算应用展示在Spring项目中做分布式计算.

工程结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@localhost spring-akka ]$ tree akka-task
akka-task
├── pom.xml
├── src
│   └── main
│   ├── java
│   │   └── com
│   │   └── elonsu
│   │   └── cluster
│   │   └── akka
│   │   ├── Application.java
│   │   └── spring
│   │   ├── actor
│   │   │   ├── Message.java
│   │   │   ├── RouterActor.java
│   │   │   └── SimpleActor.java
│   │   ├── config
│   │   │   ├── ClientConfig.java
│   │   │   └── ServerConfig.java
│   │   ├── controller
│   │   │   └── AkkaController.java
│   │   └── support
│   │   ├── SpringActorProducer.java
│   │   └── SpringExtension.java
│   └── resources
│   ├── akka-client.conf
│   └── akka-server.conf
閱讀全文 »

Web應用會話管理

發表於 2017-01-21 | 分類於 应用实践 | | 閱讀次數:

Session和Cookie

由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session。 Session是保存在服务端的,有一个唯一标识。在大型的网站,一般会有专门的Session服务器集群,这个时候 Session 信息都是放在内存的。

思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。 实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端, 需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。 有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪, 即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办? 这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。 这也是Cookie名称的由来,给用户的一点甜头。

閱讀全文 »

安装配置 - Weex

發表於 2017-01-10 | 分類於 运维部署 | | 閱讀次數:

Weex介绍

Weex 是一套简单易用的跨平台开发方案,能以web的开发体验构建高性能、可扩展的native应用,出自阿里团队.

Weex安装

安装前置条件: Weex安装前需要安装Node环境,点此下载

检测Node环境

1
2
3
4
[elonsu@localhost Elonsu ]$ node -v
v7.3.0
[elonsu@localhost Elonsu ]$ npm -v
3.10.10

Npm安装weex

npm 是一个 JavaScript 包管理工具,它可以让开发者轻松共享和重用代码。

1
[elonsu@localhost Elonsu ]$ npm install -g week-toolkit

国内开发者可以考虑使用淘宝的npm镜像cnpm安装weex-toolkit

1
2
[elonsu@localhost Elonsu ]$ sudo npm install -g cnpm
[elonsu@localhost Elonsu ]$ sudo cnpm install -g weex-toolkit

安装结束后你可以直接使用weex命令验证是否安装成功,它会显示weex命令行工具各参数:

1
[elonsu@localhost Elonsu ]$ weex
閱讀全文 »

Java日期常用示例

發表於 2016-12-30 | 分類於 应用实践 | | 閱讀次數:

日期格式化

java.util.date和java.time.LocalDateTime格式化

应用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* 格式化日期
* @param date 待格式化的日期
* @param pattern 格式化正则
* @return 格式化结果串
*/
public static String format(Date date, String pattern){
return new SimpleDateFormat(pattern).format(date);
}

/**
* 格式化日期
* @param localDateTime 待格式化的日期
* @param pattern 格式化正式
* @return 格式化结果串
*/
public static String format(LocalDateTime localDateTime, String pattern){
return localDateTime.format(DateTimeFormatter.ofPattern(pattern));
}

/**
* 格式化日期
* @param localDate 待格式化的日期
* @param pattern 格式化正则, 这里使用的类型 {@link LocalDate}, 所以正则只能设定到天
* @return 格式化结果串
*/
public static String format(LocalDate localDate, String pattern){
return localDate.format(DateTimeFormatter.ofPattern(pattern));
}
閱讀全文 »

安装配置 - ReactNative

發表於 2016-12-11 | 分類於 运维部署 | | 閱讀次數:

ReactNative和React的关系

React用于web应用开发,ReactNative采用React方式进行移动应用开发.
ReactNative采用React预发,用于进行JavaScript跨终端应用开发,既拥有原生Native的交互体验,又能够保留React的开发效率.使用灵活的Html和Css布局,使用React语法构建组件,然后同时运行在Ios和Android平台上.

ReactNative安装前提

Mac下安装Homebrew(非必须)
安装操作

1
2
3
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
[elonsu@localhost ~ ]$ brew -v
Homebrew 0.9.5 (git revision a8d6; last commit 2016-03-15)

建议不定时的更新

1
[elonsu@localhost ~]$ brew update && brew upgrade

安装NodeJs
安装react前需要保证已经安装了nodeJs,下载地址:https://nodejs.org/en/

1
[elonsu@localhost ~]$ brew install node

ReactNative安装

mac系统安装react-native

1
2
3
[elonsu@localhost ~ ]$ node --version
v7.2.0
[elonsu@localhost ~ ]$ sudo npm install -g react-native-cli

安装Watchman和Flow,监控文件变化和类型检查的。

1
2
[elonsu@localhost ~ ]$ brew install watchman
[elonsu@localhost ~ ]$ brew install flow
閱讀全文 »

安装配置 - React

發表於 2016-12-11 | 分類於 运维部署 | | 閱讀次數:

React介绍

React是一个用于构建用户界面的JavaScript库。
React主要用于构建UI,其本事不是一个MVC框架,只是是MVC中的V(视图)。
React起源于Facebook的开源项目,诞生之初用来架设Instagram网站。

React特点

声明式设计 − React采用声明范式,可以轻松描述应用。
高效 − React通过对DOM的模拟,最大限度地减少与DOM的交互。
灵活 − React可以与已知的库或框架很好地配合。
JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使用它。
组件 − 通过 React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。
单向响应的数据流 − React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。

閱讀全文 »

理解Java-CountDownLatch应用

發表於 2016-10-27 | 分類於 语言语法 | | 閱讀次數:

CountDownLatch说明

CountDownLatch是一个同步辅助类,这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。

CountDownLatch实现概要

CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。

CountDownLatch多线程应用

列表循环遍历(耗时8697ms)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Test
public void optimizeListV1(){
long start = System.currentTimeMillis();
try {
final List<String> lists = Arrays.asList("aa", "bb", "cc", "dd", "ee");
for(int i=0; i<lists.size(); i++){
if(i == 2){
Thread.sleep(3000);
}
Thread.sleep(1000);
}
System.out.println("聚合完成");
}catch (Exception e){

}finally {
MockTimeUtil.mockInvokeTime("循环列表场景模拟:", start);
}
}
閱讀全文 »
123…7
蘇若年

蘇若年

64 文章
13 分類
71 標籤
RSS
© 2019 HuntsWork
由 Hexo 強力驅動
|
主題 — NexT.Pisces v5.1.4