我有一个 RabbitMQ 代理,其中已经定义了一些交换和队列。我知道我可以通过 HTTP API 导出和导入这些定义。我想对其进行 Docker 化,并在启动时导入所有代理定义。
理想情况下,这将像通过 API 一样轻松完成。我可以编写一堆rabbitmqctl命令,但是如果有很多定义,这可能需要相当长的时间。此外,其他人通过网络界面所做的每项更改都必须插入。
我已经成功地通过编写一个脚本来休眠curl请求并启动服务器来完成我想要的事情,但这似乎很容易出错并且确实不优雅。有没有更好的方法来进行定义导入/导出,或者这是最好的方法?
我的 Dockerfile:
FROM rabbitmq:management
LABEL description="Rabbit image" version="0.0.1"
ADD init.sh /init.sh
ADD rabbit_e6f2965776b0_2015-7-14.json /rabbit_config.json
CMD ["/init.sh"]
Run Code Online (Sandbox Code Playgroud)
初始化程序
sleep 10 && curl -i -u guest:guest -d @/rabbit_config.json -H "content-type:application/json" http://localhost:15672/api/definitions -X POST &
rabbitmq-server $@
Run Code Online (Sandbox Code Playgroud) 说我有这个http处理程序:
func SomeHandler(w http.ResponseWriter, r *http.Request) {
data := GetSomeData()
_, err := w.Write(data)
}
Run Code Online (Sandbox Code Playgroud)
我应该检查返回的错误w.Write吗?我见过的例子只是忽略它而什么都不做.此外,函数http.Error()不会返回要处理的错误.
我已经设置了fail2ban来保护主机,并且我注意到了这条信息
#_daemon = asterisk
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>:.*" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
Run Code Online (Sandbox Code Playgroud)
正则表达式如何(?:::f{4,6}:)?(?P<host>\S+)工作?我一直在几个不同的正则表达式检查器和解释器中尝试它,但没有一个可以解析它,至少是部分(?P<host>\S+)。
我试图理解Python中的协同程序(一般而言).一直在阅读关于理论,概念和一些例子,但我仍然在苦苦挣扎.我理解异步模型(做了一些Twisted)但不是协同程序.
一个教程将此作为一个协程示例(我做了一些更改来说明我的问题):
async def download_coroutine(url, number):
"""
A coroutine to download the specified url
"""
request = urllib.request.urlopen(url)
filename = os.path.basename(url)
print("Downloading %s" % url)
with open(filename, 'wb') as file_handle:
while True:
print(number) # prints numbers to view progress
chunk = request.read(1024)
if not chunk:
print("Finished")
break
file_handle.write(chunk)
msg = 'Finished downloading {filename}'.format(filename=filename)
return msg
Run Code Online (Sandbox Code Playgroud)
这与此一起运行
coroutines = [download_coroutine(url, number) for number, url in enumerate(urls)]
completed, pending = await asyncio.wait(coroutines)
Run Code Online (Sandbox Code Playgroud)
看看生成器协同程序示例,我可以看到一些yield语句.这里什么也没有,urllib是同步的,AFAIK.
此外,由于代码应该是异步的,我期待看到一系列交错的数字.(1,4,5,1,2,......,"完成",......).我所看到的是一个重复结尾的单个数字Finished,然后是另一个(3,3,3,3,......"完成",1,1,1,1,......,"完成"... ).
在这一点上,我很想说教程是错误的,这只是一个协程,因为前面有异步.
我可以更改lxc容器初始化和保存的目录吗?现在它们是在/ var/cache/lxc下创建的,我希望将它们放在另一个目录中,在另一个我有更多空间的分区上.Changint分区的安装点不是一个选项,因为它已经用于其他东西.
我是WSO2配置的新手,还是HTTPS证书如何工作的相对新手,所以请耐心等待。
我正在尝试更改WSO2中HTTPS连接的证书。没有任何配置,WSO2将返回带有DN的证书CN = localhost,O = WSO2,L = Mountain View,ST = CA,C = US。我试图按照本博客文章中的说明使用自己的证书对此进行更改。
我已将我的证书导入到密钥库中,并按照文章中所述更改了配置。一个显着的区别是我找不到${carbon.home}/repository/conf/mgt-transports.xml。
完成此操作后,连接到IS服务器管理服务将导致返回“ localhost”证书,而不是导入的证书。
中的KeyStore和RegistryKeyStore条目 repository/conf/carbon.xml
<KeyStore>
<!-- Keystore file location-->
<Location>${carbon.home}/repository/resources/security/wso2carbon.jks</Location>
<!-- Keystore type (JKS/PKCS12 etc.)-->
<Type>JKS</Type>
<!-- Keystore password-->
<Password>wso2carbon</Password>
<!-- Private Key alias-->
<KeyAlias>testcert</KeyAlias>
<!-- Private Key password-->
<KeyPassword>wso2carbon</KeyPassword>
</KeyStore>
<!--
Encrypt Decrypt Store will be used for encrypting and decrypting
-->
<RegistryKeyStore>
<!-- Keystore file location-->
<Location>${carbon.home}/repository/resources/security/wso2carbon.jks</Location>
<!-- Keystore type (JKS/PKCS12 etc.)-->
<Type>JKS</Type>
<!-- Keystore password-->
<Password>wso2carbon</Password>
<!-- …Run Code Online (Sandbox Code Playgroud) 我一直用C编写一个程序,将char的前4位移到最后,最后4位移动到开头.对于大多数值,它正常工作,以及反向操作,但对于某些值,如8,x,y,z,它给出32位值.通过打印变量的十六进制值来检查值.任何人都可以解释为什么会这样吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char o, f,a=15;
scanf("%c",&o);
printf("o= %d\n",o);
f=o&a;
o=o>>4;
printf("o= %d",o);
o=o|(f<<4);
printf("o= %x, size=%d\n",o,sizeof(o));
f=o&a;
o=o>>4;
printf("o= %d",o);
o=o|(f<<4);
printf("o= %x, size=%d\n",o,sizeof(o));
return 0;
}
Run Code Online (Sandbox Code Playgroud)