工具使用

本地producer和consumer连接不上远程kafka服务

月盾
Hostname and port the broker will advertise to producers and consumers. If not set, it uses the value for “listeners” if configured. Otherwise, it will use the value returned from java.net.InetAddress.getCanonicalHostName(). advertised.listeners=PLAINTEXT://ip:9092 打开advertised.listeners=PLAINTEXT://ip:9092配置,ip为kafka服务ip

推荐在Nodejs使用的java常用技术和工具

月盾
作为Nodejs开发者可能会对java中常用的一些技术工具不太关心,主要原因大概除了语言级别的间隙就是Nodejs相对于java来说比较轻量级,大多用来开发简单系统,用不到其他工具。根据经验来说,开发相同功能的系统,Nodejs的开发周期和代码体量上也会比Java少太多,毕竟java出生年代长,生态丰富,如果不使用几个框架都感觉不是在开发系统。而Nodejs要开发一个web系统基本使用express或koa就差不多够了。所以对于Nodejs开发者来说,分布式,消息队列,远程调用等技术接触就少些。当然,不用这些技术其实也不会有太大影响,但是对于一个有追求有理想的码农来说我们的眼界不应该局限于系统能运行就行。 下面就来介绍一些可以在nodejs中使用的JAVA常用工具和技术。 elasticsearch ElasticSearch(以下简称ES)是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。看见了吧,这就是一个使用JAVA开发的全文搜索引擎,到底有什么用呢?就是可以提供像google和百度一样的搜索功能,就算不需要这样功能,也可以用于管理后台的字段搜索,大家知道数据库的搜索效率比较差,有索引的字段还好,没有的就很慢了,这时ES就可以派上用场了,把数据同步进ES,不论查询列表还是以字段搜索都是极快的,是redis缓存的很好补充。 ELK ELK(ElasticSearch,LogStash,Kibana)是三个工具的组合, Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。 Kibana是一个使用nodejs开发的web应用,用于查询和操作ES,就是一个ES的图形界面。 如果nodejs系统布署在多台服务器,那么查看日志是件很头疼的事,你不知道请求发送到哪一台服务器,需要挨个查看,如果服务超过5台,这绝对是噩梦。这时候ELK就是很好的解决方案,LogStash收集每一台服务器的日志统一存到ES中,利用ES的优点,查询任何关键字都很快很方便。 消息中间件(kafka) 拿用户注册为例,需要发送邮件,短信,这两个服务之间本没有关联关系,但我们的一贯作风是用户注册的时候调用邮件服务,短信服务,严谨一点会放在事务中操作,假如一个服务失败可能会让事务回滚,所有操作都失败。这是一种情况,另一种情况是如果要再注册后加积分,那么就得改代码,要是有更多服务要添加就得每次改代码发布,启停服务,不送积分了又要删代码,这就是耦合度太高导致的结果。使用消息中间件不仅能保证服务完整性还可以有效解耦,有兴趣可以去了解kafka,rabbitMQ,roketMQ等消息中间件。 远程调用RPC 通俗的来讲就是两台服务器A和B,A服务器直接调用B服务器上的函数,如果没有一个具体事例很难理解A服务器怎么可能调用到B服务器的函数,感兴趣可下载尝试:https://github.com/yuedun/nodejs-grpc 那么为什么要用rpc呢?A服务器要调用B服务的资源直接用http提供接口不就行了吗?其实http也算是一种远程调用,而且也比较简单直观,但是其效率较低,调用成本高,三次握手耗时,甚至请求头的数据量比请求体还大。那么就需要一种更高效的调用协议了——rpc。为什么需要RPC,而不是简单的HTTP接口 总结:以上的这些工具和技术和语言并没有绑定,java可以使用,nodejs也可以使用,推荐理由:投入成本小,使用收益高。

Dockerfile CMD命令没有执行npm start

月盾
Dockerfile FROM hub.c.163.com/public/nodejs:6.11.0 WORKDIR /app COPY . /app RUN npm install EXPOSE 3000 # CMD ["npm", "start"] ENTRYPOINT ["npm", "start"] docker ps: CONTAINER ID IMAGE COMMAND 59988bd90894 myfd "/bin/sh -c '/usr/..." 在Dockerfile中配置了CMD ["npm", "start"],docker ps后显示COMMAND为"/bin/sh -c '/usr/..." 改为ENTRYPOINT ["npm", "start"]就可以了

windows好用的bash工具——ConEmu

月盾
其实git-bash-for-windows这个git bash工具已经很好用了,不过对于平时需要开3-5的bash窗口的我来说就比较烦了,一直要不停的切换窗口,所以想找一款像linux terminal一样可以多开的工具,幸好有这样的工具,那就是ConEmu。 使用前需要一些配置,不配置也没关系,就是使用起来不方便,我是按照的习惯完全配置成了git bash的使用方式。 第一步: 第二步: 配置本地git bash地址(此步骤可适当配置 第三步: 设置ConEmu启动即打开bash而非windows cmd 第四步: 如果前面都没问题,可以设置自动保存打开的窗口,以便下次打开即可使用 最后: 根据个人喜好修改字体等 这样就可以完美使用git bash,不论是自动补全还是颜色主题都和git bash无异。 另外cmder其实也是我使用过的一个不错的工具,同时推荐试用。

npm ERR! Error: EPERM: operation not permitted

月盾
windows下npm install安装依赖的时候出现下面的错误: npm ERR! Windows_NT 6.1.7601 npm ERR! argv "D:\\Program Files\\nodejs\\node.exe" "D:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "yog2@1.0.0" npm ERR! node v4.8.0 npm ERR! npm v2.15.11 npm ERR! path C:\Users\Administrator\AppData\Roaming\npm-cache\images\3.0.0\package.tgz.1683947925 npm ERR! code EPERM npm ERR! errno -4048 npm ERR! syscall rename npm ERR! Error: EPERM: operation not permitted, rename 'C:\Users\Administrator\AppData\Roaming\npm-cache\images\3.0.0\package.tgz.1683947925' -> 'C:\Users\Administrator\AppData\Roaming\npm-cache\images\3.0.0\package.tgz' npm ERR! at Error (native) npm ERR! { [Error: EPERM: operation not permitted, rename 'C:\Users\Administrator\AppData\Roaming\npm-cache\images\3.0.0\package.tgz.1683947925' -> 'C:\Users\Administrator\AppData\Roaming\npm-cache\images\3.0.0\package.tgz'] npm ERR! errno: -4048, npm ERR!

RockMongo使用方法

月盾
RockMongo是一个PHP5写的MongoDB管理工具。 鉴于百度bce的mongodb数据使用了RockMongo来管理数据,就以此来说明。 查询操作 点击某个collection后的默认画面: 查询界面很简单,关键是怎么写查询语句? 点击文本可以查看所有数据字段,查询title为“测试”文档: array( 'title' => '测试' ) 模糊查询: array( 'title'=> new MongoRegex("/测试/i") ) 字段名要加引号,中间使用=>而不是使用:分割,需要查询的值也需要注意,字符串加引号,数字不加,如果类型不匹配就会查不出数据。查询结果有一条数据 修改操作 动作中选择“modify” 再查询一下 基本操作就是这样,删除操作不用说也应该能知道怎么做了。

VMware重新安装VMware Tool

月盾
VMware重新安装VMware Tool 将虚拟机从Ubuntu 14重新安装为Ubuntu 16以后不能将Windows的文本内容复制到Linux中,需要重新安装VMware Tool,VMware版本为12 一、安装VMware Tool 安装时需要在虚拟机启动登录的情况下进行, 点击以后应该会弹出磁盘图标并且打开一个文件夹 文件夹中包含一个压缩文件,需要解压,解压需要root权限,打开命令行 # sudo su 提升为超级用户,可以右击查看gz压缩文件路径,并切换到该目录下,或者可以直接使用图形界面,右击-提取,不能提取到当前目录下,该目录为磁盘目录,不能写入数据,解压到其他目录下即可。解压完成会得到vmware-tools-distrib文件夹,文件夹下有多个文件,其中有vmware-install.pl,命令行中执行这个文件 ./vmware-install.pl 基本可以一路按回车,安装完成后需要重启。重启后可能会有这样的显示,不过不影响。

webuploader模态框按钮不起作用或每次打开都会变大

月盾
在bootstra模态框中放置webuploader上传控件,每次打开模态框按钮都会成倍放大,原因是每次打开模态框都会进行一次初始化,在原来按钮的基础上又加了一层样式,那么初始化一次应该可以吧。 修改后的确不会再放大了,可以又有新问题出现了,就是不能点击上传文件了。 上传实例初始化一次,先然按钮正常显示, var uploader = WebUploader.create({}), 再通过uploader提供的API重新添加一个按钮uploader.addButton({}),这样类似于将前一个按钮覆盖了。

TortoiseGit提交到远程仓库时git did not exit cleanly (exit code 128)

月盾
虽然出现git did not exit cleanly (exit code 128)的情况各有不同,不过其中一种是提交时的读写权限有问题,如果本地代码连接的是SSH仓库,那么可能是服务端没有配置SSH Key。github有两个地方配置sshkey,有一个是全局的,另一个是针对单个仓库的,如果给某个仓库配置了Deploy keys(其实和SSHkey一样),提交另一个代码时就会出现git did not exit cleanly。对于我这种不熟练的人来说就想着再添加一个Deploy keys,但是又提示Key already in use,这时就要看看是不是其他仓库单独配置了ssh key。如果仓库太多具体哪个配置了也不太清楚,有个简单快读的办法是在命令行执行 ssh -T -ai .\id_rsa git@github.com,会告诉你哪个仓库在使用本地的id_rsa内容。删掉Deploy keys,配置为全局SSH Keys就行了

Git SSH Key在windows下生成过程

月盾
切换到C:\Users\\.ssh 执行命令:ssh-keygen -t rsa -C “邮箱地址” Generating public/private rsa key pair. Enter file in which to save the key (//.ssh/id_rsa): 第一次生成由于没有id_rsa文件和id_rsa.pub文件,所以需要生成这两个文件,然后手动输入:./id_rsa Enter file in which to save the key (//.ssh/id_rsa): ./id_rsa,虽然要求输入//.ssh/id_rsa,但这种方式不是在当前目录下 接下来两部是要求输入密码,不输入直接回车就完成了。 PS C:\Users\admin\.ssh> ssh-keygen -t rsa -C "myemail@163.com" Generating public/private rsa key pair. Enter file in which to save the key (//.ssh/id_rsa): ./id_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in .