当前位置: 首页 > article >正文

Ubuntu下beanstalkd无法绑定局域网IP地址以及消息队列beanstalkd上的error: JOB_TOO_BIG的解决

一、ubuntu下beanstalkd无法绑定局域网IP地址

    今天因为业务需要,我把之前安装的beanstalkd所绑定的IP地址由127.0.0.1改成局域网IP地址,但是怪了,显示beanstalkd已经启动,查看端口监控也显示IP地址变了,但是使用telnet连接的却依然是连接不上,报错:Unable to connect to remote host: Connection refused。真是奇怪,难道是防火墙的问题?觉得不应该,但还也加上了这个端口的全部accept规则,但是依然不起作用。看来还是得从beanstalkd自身找问题。

    过程是这样的:我安装beanstalkd使用的是apt-get方式,beanstalkd的配置文件路径存在于这个路径文件:/etc/default/beanstalkd,修改之后使用service beanstalkd restart进行重启也没有报什么错误。但是就是不起作用。

root@us78:/# cat /etc/default/beanstalkd
## Defaults for the beanstalkd init script, /etc/init.d/beanstalkd on
## Debian systems.
BEANSTALKD_LISTEN_ADDR=10.78.11.12
BEANSTALKD_LISTEN_PORT=11300
root@us78:/# service beanstalkd restart
root@us78:/# telnet 10.78.11.12 11300
Trying 10.78.11.12...
telnet: Unable to connect to remote host: Connection refused

    后来了解到,这个问题是因为只要是从debian软件包安装的beantalkd,则它同时带有systemd .service和.socket。 当beantalkd由.socket启动时,无论您如何配置.service,它都会去绑定127.0.0.1。此时通过service beanstalkd status也能看到它会忽略我们配置的IP地址(如下日志),解决办法也很简单,就是移除这个路径/lib/systemd/system/beanstalkd.socket的.socket文件,然后重启systemctl daemon-reload and systemctl restart beanstalkd,即可解决,过程如下:

#service beanstalkd status忽略我们配置的IP地址
asdf beanstalkd[4323]: /usr/bin/beanstalkd: inherited listen fd; ignoring option: -l 10.78.11.12
asdf beanstalkd[4323]: /usr/bin/beanstalkd: inherited listen fd; ignoring option: -p 11300
#查看文件内容:/lib/systemd/system/beanstalkd.socket
root@us78:/etc/default# cat /lib/systemd/system/beanstalkd.socket
[Unit]
Description=Beanstalkd socket
Documentation=man:beanstalkd(1)
Before=sockets.target

[Socket]
ListenStream=127.0.0.1:11300

[Install]
WantedBy=sockets.target
#删除beanstalkd.socket文件并重启
root@us78:/etc/default# mv /lib/systemd/system/beanstalkd.socket /lib/systemd/system/beanstalkd.socket.bak
root@us78:/etc/default# systemctl daemon-reload
root@us78:/etc/default# systemctl restart beanstalkd.

二、消息队列beanstalkd上的error: JOB_TOO_BIG的解决

    今天一个处理处理消息队列的程序出现了报错,其中往beanstalkd添加消息的时候出现:Put error: JOB_TOO_BIG in beanstalk-client/src/Client.php:283,出现此报错的原因是往beanstalkd添加的消息个数(待处理)超过了最大限制,限制是多少呢?我们可以使用beanstalkd -z选项的值,默认是(default is 65535)。通过telnet beanstalkd端口查看stats返回结果可以看到,因此这里需要将此配置进行修改。

    我的系统是Ubuntu 16.04,beanstalkd是使用apt get install安装的,如果你是命令行启动的话直接加上-z选项即可,但不想改成命令行启动,网上看到用户在启动脚本中添加项成功,我尝试

#添加下面这行并修改DAEMON_OPTS这行,后重启
root@u33:$ vim /etc/init.d/beanstalkd
MAX_JOB_SIZE="-z 524280"
DAEMON_OPTS="-l $BEANSTALKD_LISTEN_ADDR -p $BEANSTALKD_LISTEN_PORT $BEANSTALKD_EXTRA -z 1000000"
root@u33:$ service beanstalkd restart

     但telnet通过stats查看仍然没有变化,后看到有DEBIAN用户说在/etc/sysconfig/beanstalkd中添加MAX_JOB_SIZE=-z 524280 选项解决问题,不过我使用的ubuntu,找到/etc/default/beanstalkd配置文件,上篇文章: ubuntu下beanstalkd无法绑定局域网IP地址  刚解决过/etc/default/beanstalkd不生效的问题,在这里添加MAX_JOB_SIZE配置后成功了。

#添加以下行代码执行重启
$ vim /etc/default/beanstalkd
BEANSTALKD_LISTEN_ADDR=0.0.0.0
BEANSTALKD_LISTEN_PORT=11300
#添加以下配置
BEANSTALKD_EXTRA="-z 524280"
root@u33:/# telnet 11.98.127.92 11300
Trying 11.98.127.92...
Connected to 11.98.127.92.
stats
---
total-jobs: 0
max-job-size: 524280

     在这里我发现了一个差异,解决这个问题有两种配置:一种是BEANSTALKD_EXTRA=-z 524280,一种是MAX_JOB_SIZE=-z 524280,看这名称有可能是这样,如果在启动脚本中解决应该使用BEANSTALKD_EXTRA,而在配置文件中解决就使用MAX_JOB_SIZE,我的启动起来了,我也没去尝试,其它朋友可以试试是不是这样。


http://www.kler.cn/a/310580.html

相关文章:

  • MySQL远程连接错误解决:Host is not allowed to connect to this MySQL server
  • 计算机新手练级攻略——如何搜索问题
  • 力扣 653. 两数之和 IV 二叉树/binary-tree two-sum IV
  • 鸿蒙next版开发:ArkTS组件通用属性(Z序控制)
  • 初始JavaEE篇 —— 文件操作与IO
  • Linux中线程的基本概念与线程控制
  • C# HttpListener 实现的HTTP Sever浏览器文件下载
  • 配电房监控 配电柜监测系统方案简介@卓振思众
  • 基于C语言--解读main(int agrc,char* argv[ ])(命令行参数+环境变量)
  • 【数据结构与算法】排序算法之快速排序(简)
  • WPF自定义Dialog模板,内容用不同的Page填充
  • TypeScript入门 (二)控制语句
  • C++伟大发明--模版
  • 使用大语言模型(LLM)修正小段乱码(Mojibake)为正常文本
  • expected_conditions(EC) 判断元素的操作
  • OpenCVSharp直方图和傅里叶变换介绍
  • 2024.9.15 Python模式识别新国大EE5907,总结PCA,LDA,Clustering,GMMboosting,SVM
  • istio中serviceentry结合egressgateway的使用
  • 求和(2)
  • C# 禁止程序重复启动
  • 科技创新驱动未来发展
  • Qt 内嵌 Python 解释器动态调试
  • canvas和svg的区别是什么?它们的应用场景是什么?
  • github域名与IP变更导致无法推送分支问题的解决
  • QT信号槽原理是什么,如何去使用它?
  • POSIX信号量以及利用POSIX信号量实现基于循环队列的高效生产者消费者模型