前言

作为一名Android开发,有的时候也是要做做其他工作的,前段时间写了一个很简单的java消息转发程序,因为和三方厂商合作,对方只提供了java的sdk,然而我们这边都是清一色的C#后台开发人员,所以我就起到桥梁的作用了,总结一下简单的工作,以后回望或许有所感想。

程序方面

怎么提供消息给C#程序员呢?那当然是RabbitMQ,这个相对简单,也贴一下,万一以后会用到MQ呢?

        // 设置配置信息
if(factory == null){
factory = new ConnectionFactory();
factory.setHost(Config.host);
factory.setPort(Config.port);
factory.setVirtualHost(Config.virtualHost);
factory.setUsername(Config.username);
factory.setPassword(Config.password);
}
// 设置链接信息
if(connection == null || (connection != null && !connection.isOpen())){
connection = factory.newConnection();
channel = connection.createChannel();
channel.exchangeDeclare(Config.EXCHANGE_NAME, "direct", durable);
channel.confirmSelect();
}
// 设置频道信息
if(channel == null || (channel != null && !channel.isOpen())){
channel = connection.createChannel();
channel.exchangeDeclare(Config.EXCHANGE_NAME, "direct", durable);
channel.confirmSelect();
} // 发送消息
channel.basicPublish(Config.EXCHANGE_NAME, Config.ezviz_key, MessageProperties.PERSISTENT_BASIC,
msg.getBytes());

当然代码里做了适当封装,但MQ使用就是这样了,当然这只是简单的MQ使用,根据场景使用可能会使用别的类型,比如一个生产者多个消费者什么的。这方面推荐一个地址:https://www.cnblogs.com/luxiaoxun/p/3918054.html

我觉得他讲得很适合初学者。

开发环境运行

因为这个消息转发就是接入SDK,然后对消息进行处理,处理完毕之后按着C#程序员给我的格式,对处理完毕的消息进行类型转换并json一下,然后发送到MQ队列,很简单,所以就打算用jar包的形式做后台跑在linux服务器上,那么我们很简单的方法可以实现这个问题:

nohup /usr/java/jdk1.8.0_112/bin/java -jar /root/java/MessageForwarding.jar  >/root/java/message.log &

通过nohup指令使程序不依赖于控制台,这样运行完毕之后可以ctrl+c,程序还继续运行,上面的日志讲jar包里面的打印语句都输出到了message.log里面,这样在程序里面的日志都能够查看,当然看看需不需要写一下定期清理,视情况而定了。这样满足了基本的功能需求,但是linux重启自后怎么办?其实这一块说起来简单,过程可能有点弯。

方法一:

通过java wrapper做这一块工作,详细的过程可以搜一下java wrapper,这方面的教程很多,这里贴一个官方网站吧:

https://wrapper.tanukisoftware.com

方法二:

通过我了解的linux的开机启动文件,我想通过shell脚本完成这个事,我先把jar包放到/root/java/MessageForwarding.jar这里,然后编辑一个简单的shell脚本(MessageForwarding.sh):

# !/bin/bash
# program
# test java open export JAVA_HOME=/usr/java/jdk1.8.0_112
export JRE=/usr/java/jdk1.8.0_112/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE/lib:.
export PATH=$PATH:$JAVA_HOME/bin/:$JRE/bin
nohup java -jar /root/java/MessageForwarding.jar >/root/java/message.log &

当然很简单,这就是执行jar包,运行一下,执行这个sh文件,没有问题:可以通过:

ps -ef|grep java查询一下进程。

开机启动就需要操作/etc/rc.local文件,有可能linux系统不同文件有些区别,我之前看别的博客就没成功,只要在这里执行这个文件就OK了。

保存退出,开机重启,查询一下进程,程序已经在进程中了,而且消息也在MQ队列了。

最后

这个过程很简单,记录一下,不然以后连简单的东西都忘记了,可能有错误的地方,也或许这样做不太合适,希望批评指正:redzkh@gmail.com

linux下jar包的生存与开机自动启动的更多相关文章

  1. Linux系统下jar包的启动方式

    Linux 运行jar包命令如下: 方式一: Java -jar shareniu.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? ...

  2. Linux 运行jar包命令(Cent OS 7后台运行jar包)

    Linux 运行jar包命令如下: 方式一 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 java -jar shareniu. ...

  3. Linux中jar包启动和jar包后台运行

    Linux 运行jar包命令如下: 方式一: java -jar shareniu.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? ...

  4. Linux下RPM包的安装

    Linux下RPM包安装 二进制包(RPM包.系统默认包) RPM安装 rpm -ivh 包全名(查询依赖网址:http://www.rpmfind.net) -i(install):安装 -v(ve ...

  5. linux下抓包学习--tcpdump的使用

    一.为什么需要学这个 很多时候,开发环境上不会出现问题.但在测试或者现场时,总是会有很多莫名其妙的问题. 这时候,能在出问题的环境上,开启抓包,然后再去重现问题的话,这时候,就可以拿到第一手的资料了. ...

  6. 教你配置使用阿里云 Maven 库,体验秒下 jar 包的快感

    鉴于国内的网络环境,从默认 Maven 库下载 jar 包是非常的痛苦. 速度慢就不说了,还经常是下不下来,然后一运行就是各种 ClassNotFoundException,然后你得找到残留文件删掉重 ...

  7. Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img.

    Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img. 2014年10月20日 ⁄ 计算机视觉 ⁄ 共 1 ...

  8. Linux中jar包指定端口启动并记录日志

    Linux中jar包指定端口启动并记录日志: java -jar -Dserver.port=38080  group-buying-0.0.1-SNAPSHOT.jar   >log.log ...

  9. linux下rar包的解压方法

    linux下rar包的解压方法 学习了:https://blog.csdn.net/yonggeit/article/details/72190246?utm_source=itdadao&u ...

随机推荐

  1. Android Material风格的应用(三)--DrawerLayout

    添加抽屉导航 Android Material风格的应用(一)--AppBar TabLayoutAndroid Material风格的应用(二)--RecyclerViewAndroid Mater ...

  2. [转]MySQLHelper类

    本文转自:http://de.cel.blog.163.com/blog/static/5145123620110181003903/ 类似于SQLHelper,只是这里引用的是MySql.Data类 ...

  3. 并发,one

    引言 最近工作当中写了一个有关并发的程序,引起了LZ对并发的强烈兴趣.这一下一发不可收拾,LZ用了一个多星期,看完了这本共280+页的并发编程书.之所以能看这么快,其实这主要归功于,自己之前对并发就有 ...

  4. Javascript和jquery事件--双击事件

    在js中和jq中对应的命名都为dblclick,ondblclick,但是ondblclick和dom元素的属性相似,可以在行内设置,也可以使用attr设置. 同时,双击事件需要关注一个问题,那就是双 ...

  5. MVC+EasyUI实现查询显示到对应表格

    这里要说的显示界面是Razor页面.我们要使用easyui首先应该在界面中加入对应的引用,例如以下代码,这些都是必要的引用文件,能够依据自己所存放的路径来加入src地址. @*加入Jquery Eas ...

  6. UIDeviceOrientationDidChangeNotification和UIApplicationDidChangeStatusBarFrameNotification

    这几天做App的时候,需要添加旋转屏通知以便调整UI布局 刚开始我使用的是UIDeviceOrientationDidChangeNotification, 一直有一些问题就是,如果使用这个通知,当i ...

  7. 【例题 6-8 UVA - 548】Tree

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 后序遍历的最后一个是根节点. ->然后在中序遍历中找到这个节点. 分为左右两段. 然后递归上述操作就好. 题目描述好坑啊. 原 ...

  8. swift项目第三天:手写代码搭建主框架

    一:先配置环境:自定义Log输出(DEBUG 和 release模式),并屏蔽后台多余的打印信息 1:屏蔽后台多余的打印信息:如果写了OS_ACTIVITY_MODE = disable 还是不行.把 ...

  9. 【BZOJ 1597】 [Usaco2008 Mar]土地购买

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把这n个土地按照x为第一关键字.y为第二关键字.都升序排. 然后考虑一个土地xi,yi 若有一个土地的x<=xi且y<= ...

  10. Java 线程第三版 第九章 Thread调度 读书笔记

    一.Thread调度的概述 import java.util.*; import java.text.*; public class Task implements Runnable { long n ...