linux上部署rmi+memcache服务
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/50020437
最近在学习linux上搭建Rmi+Memcache服务等相关技术。开始学习的过程有些艰辛,也遇到了不少的问题,但问题最后都迎刃而解。下面将学习总结分享给大家,主要包括安装linux系统,在系统上搭建服务运行环境、部署代码、启动服务器端服务、客户端运行等。详情见下方讲解(写的不是特别的详细),希望本文对你有所帮助。
A、安装linux操作系统
1、CentOS 6.6 x86_64官方正式版系统(64位)
http://www.xitongzhijia.net/linux/201412/33603.html#download
2、CentOS 6.6 i386官方正式版系统(32位)
B、安装JDK1.7
1、下载地址
http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html
2、将下载的文件解压缩到/usr/local/development/jdk1.7.0_04目录。
3、创建文件/etc/profile.d/development.sh,将下面的内容复制到该文件。
exportJAVA_HOME=/usr/local/development/jdk1.7.0_04
export JRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
4、重启电脑,使用命令java-version检查JDK是否安装成功。
C、安装memcache、libevent
(1)检查libevent:
首先检查系统中是否安装了libevent
Shell代码
rpm -qa|grep libevent
如果安装了则查看libevent的安装路径,后续安装时需要用到
Shell代码
rpm -ql libevent
如果没有安装,则先安装libevent
(2)安装libevent:
1.首先下载libevent安装包
Shell代码
wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz
2.解压缩安装包
Shell代码
tar zxvf libevent-1.4.12-stable.tar.gz -C /usr/local/
3.进入解压后的目录
Shell代码
cd libevent-1.4.12-stable/
4.配置编译、安装
Shell代码
./configure -prefix=/usr/libevent
make
make install
(3)安装memcached:
1.首先是下载memcached的安装包
Shell代码
wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
2.修改安装包的执行操作权限
Shell代码
chmod 777 memcached-1.4.15.tar.gz
3.解压安装包到指定目录
Shell代码
tar zxvf memcached-1.4.15.tar.gz -C /usr/local
4.进入解压后的目录
Shell代码
cd /usr/local/memcached-1.4.15/
5.配置、编译、安装
注:configure时需要指定libevent的安装路径
Shell代码
./configure -with-libevent=/usr/libevent/ -prefix=/usr/local/memcached
make
make install
6.安装成功后启动一下看安装是否成功
Shell代码
/usr/local/memcached/bin/memcached -d -m 2048 -p 11211 -u root
启动参数介绍如下:
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,这里是10MB,
-u是运行Memcache的用户,这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,这里设置了256,按照服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在/tmp/memcached.pid,也可以启动多个守护进程,不过端口不能重复。
D、部署
1、下载winscp
http://rj.baidu.com/soft/detail/15150.html?ald
2、将本地代码打包成jar文件,连接服务器,通过scp将源码对应的jar文件和源码依赖的jar文件传输到服务器中,创建lib文件夹,将jar文件放入lib中;在同一目录创建bin文件夹,并在当前文件夹中创建startup.sh和stop.sh 等配置文件。startup.sh如下所示:
<span style="font-size:18px;"><span style="font-size:18px;">#!/bin/sh
root_path=$(cd "$(dirname "${0}")"; cd ..; pwd)
-cp ${root_path}/lib/*:${root_path}/bin/ com.letv.main.Main >> ${root_path}/nohup.out 2>&1 &</span></span>
3、运行startup.sh,查看nohup.out,观察服务是否正常启动服务。也可通过ps -ef | grep java查看进程是否存在。如果进程启动成功,则成功创建RMI服务。
4、启动memcache服务,即可通过memcache存取数据。
5、此时,通过客户端调用远程服务,可对数据进行CRUD操作。
E、注意
1、在运行客户端程序时,可能报错:
java.rmi.ConnectException: Connection refused to host: 192.168.134.128; nested exception is:
java.net.ConnectException: Connection refused: connect
此时,要关闭linux服务器的防火墙。
service iptablesstatus 可以查看到iptables服务的当前状态。
启动和关闭防火墙的命令:
(1) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
(2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
2、在执行start.sh文件启动服务时,可能会提示:
-bash: ./bin/start.sh: Permission denied
解决方法:在shell下执行:chmod a+x *.sh,例如执行chmod a+x start.sh即可。
3、在执行start.sh文件启动服务时,可能会提示:
nohup: redirecting stderr to stdout
解决方法:在start.sh中将“&” 改成 “2>&1 &”
F、服务器端
<span style="font-size:18px;"><span style="font-size:18px;">public class Main {
public static void main(String[] args) {
try {
LocateRegistry.createRegistry(1099);
RemoteInterface remote = new RemoteInterfaceImpl();
Naming.rebind("RMI", remote);
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}</span></span>
远程接口
<span style="font-size:18px;"><span style="font-size:18px;">public interface RemoteInterface extends Remote {
public String get(String key) throws RemoteException;
public void delete(String key) throws RemoteException;
public int set(String key, Object obj) throws RemoteException;
}</span></span>
远程接口实现
<span style="font-size:18px;"><span style="font-size:18px;">public class RemoteInterfaceImpl extends UnicastRemoteObject implements RemoteInterface{
private static final long serialVersionUID = -1808687292095223102L;
private static final MemcacheInterface memcached = new MemcacheInterfaceImpl();
public RemoteInterfaceImpl() throws RemoteException {
super();
}
@Override
public String get(String key) {
return memcached.get(key);
}
@Override
public void delete(String key) {
memcached.delete(key);
}
@Override
public int set(String key, Object obj) {
return memcached.set(key, obj);
}
}</span></span>
memcache持久化缓存实现
<span style="font-size:18px;"><span style="font-size:18px;">public interface MemcacheInterface {
public String get(String key);
public void delete(String key);
public int set(String key, Object obj);
}</span></span>
<span style="font-size:18px;"><span style="font-size:18px;">public class MemcacheInterfaceImpl implements MemcacheInterface {
protected MemcachedClientBuilder builder = new XMemcachedClientBuilder(
AddrUtil.getAddresses("127.0.0.1:11211"));
protected MemcachedClient client;
public MemcacheInterfaceImpl() {
builder.setSocketOption(StandardSocketOption.SO_RCVBUF, 12 * 1024);
builder.setSocketOption(StandardSocketOption.SO_SNDBUF, 6 * 1024);
builder.setConnectionPoolSize(2);
builder.getConfiguration().setStatisticsServer(false);
try {
client = builder.build();
client.setOptimizeMergeBuffer(false);
client.setEnableHeartBeat(false);
client.setOpTimeout(3000);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public String get(String key) {
if (key != null) {
try {
return client.get(key);
} catch (TimeoutException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (MemcachedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
public void delete(String key) {
if (key != null) {
try {
client.delete(key);
} catch (TimeoutException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (MemcachedException e) {
e.printStackTrace();
}
}
}
@Override
public int set(String key, Object obj) {
if (key != null) {
try {
client.set(key, 0, obj);
return 0;
} catch (Exception e) {
e.printStackTrace();
return 1;
}
}
return 1;
}
}</span></span>
G、客户端
<span style="font-size:18px;"><span style="font-size:18px;">public class Client {
public static void main(String[] args) {
try {
// 注册服务
Registry registry = LocateRegistry.getRegistry("192.168.242.128", 1099);
RemoteInterface rmiService = (RemoteInterface) registry.lookup("RMI");
// set
rmiService.set("good", "good day");
// get
System.err.println("获取:" + rmiService.get("good"));
// delete
rmiService.delete("good");
// set
rmiService.set("Monday", "1000");
System.err.println(rmiService.get("Monday"));
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}</span></span>
linux上部署rmi+memcache服务的更多相关文章
- Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务
文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...
- 数据库系统入门 | Oracle Linux上部署Oracle 11g服务,并实现SSH远程登录管理
文章目录 写在前面 一.实验内容 二.实验前期准备 1.软件目录 2.准备一些配置文件.脚本文件 三.实验方案(具体步骤) (一)在虚拟机上安装Oracle Linux (二)在Linux上安装Ora ...
- 在linux上部署tomcat服务
在linux上部署tomcat 1.安装JDK 2.下载tomcat http://tomcat.apache.org/download-70.cgi 3.上传到服务器,并解压 4.上传war包或者已 ...
- Linux上部署SVN
Linux上部署SVN author:headsen chen 2017-10-16 16:45:04 前提:通过yum来安装,必须是centos6.5的桌面版的.否则会出现某些的安装包不全而导致 ...
- Linux上部署多个tomcat端口设置
在Linux上部署多个tomcat主要是防止端口冲突的问题, tomcat服务器需配置三个端口才能启动,安装时默认启用了这三个端口,当要运行多个tomcat服务时需要修改这三个端口,不能相同.端口一: ...
- Linux上部署web服务器并发布web项目-转
Linux上部署web服务器并发布web项目 近在学习如何在linux上搭建web服务器来发布web项目,由于本人是linux新手,所以中间入了不少坑,搞了好久才搞出点成果.以下是具体的详细步骤以 ...
- 在linux上部署自己开发的web项目
在linux上部署自己开发的web项目 前言:相信有很多做开发的小伙伴和我之前一样,只会在windows环境下,利用开发工具开发运行web项目,但是却不知道怎么把开发好的项目部署到linux服务器上去 ...
- linux 上部署 YApi 可视化接口管理平台
linux 上部署 YApi 可视化接口管理平台: YApi 是一个高效.易用.功能强大的可视化接口管理平台,官方地址 : http://yapi.demo.qunar.com/ 环境要求 nodej ...
- 在Linux上部署Web项目
You believe it or not there is a feeling, lifetime all not lost to time. 在Linux上部署Web项目 这个是普通的web项目, ...
随机推荐
- [Vim]新建python文件自动添加python header
使用vim脚本来实现的,使用了模板,几行代码就能实现很实用. ~/.vimrc 中的代码 "auto add pyhton header --start autocmd BufNewFile ...
- ghmm在 Linux 上安装
ghmm在 Linux 上安装 http://ghmm.sourceforge.net/documentation.html http://www.ghmm.org http://www.comp.l ...
- GDAL 2.0版本RPC校正速度测试
GDAL2.0版本的更新日志中提到了对RPC校正的优化,今天测试了一下,发现提升的速度还是蛮快的,测试的数据是一个IRS-P5的数据. 单线程测试 首先使用一个线程进行测试,使用下面的批处理进行运行, ...
- 基于CAS实现单点登录(SSO):工作原理
工作中使用到了SSO,网上看到了这个博客的一系列文章感觉不错,转载收藏 源地址http://blog.csdn.net/tch918/article/details/19930037 系列文章的第一篇 ...
- Android初级教程:Android中解析方式之pull解析
在安卓中有很多种解析方式.按照大方向有xml解析和json解析.而,细致的分,xml和json解析各有自己的很多解析方式.今天这一篇主要介绍xml解析中的pull解析.对于xml的解析方式,我之前在j ...
- TortoiseSVN文件夹图标不显示
伴随着十二月的脚步,小编带领的市委组织部项目有条不紊的进行着,在最近的项目中遇到一个问题TortoiseSVN文件夹的图标不显示,为什么小编已经安装好TortoiseSVN了,发现文件夹的图标还是系统 ...
- HashMap方法介绍
1. Map的遍历方式 (1) for each map.entrySet() Map<String, String> map = new HashMap<String, Strin ...
- ROS_Kinetic_16 ubuntu中安装使用Matlab和ROS
ROS_Kinetic_16 ubuntu(16.04)中安装使用Matlab(2015b)和ROS(kinetic) 参考网址:http://cn.mathworks.com/hardware-su ...
- Dynamics CRM 导入用户数据错误 could not retrieve salesperson role
在CRM中通过导入数据的方式创建用户时报下图中的错误,"could not retrieve saleperson role".原因是系统中的自带的salesperson安全角色被 ...
- django练习——博客系统优化
一直准备使用Django搭建一个个人网站,最近终于开始动手,上周已经完成了基本博客功能的搭建(http://blog.csdn.net/hcx25909/article/details/2460133 ...