我使累积服务器工作有困难。我启动了它,但是如果OCB收到例如新订阅,它不会给出任何结果。这个过程如下:
我开始acc。服务器在tutorial从新近克隆的OCB回购中得知。结果我进入了控制台:
tmp@tmp-VirtualBox:~/fiware-orion/scripts$ ./accumulator-server.py --port 1028 --url /accumulate --host ::1 --pretty-print -v
verbose mode is on
port: 1028
host: ::1
server_url: /accumulate
pretty: True
https: False
Running on http://[::1]:1028/ (Press CTRL+C to
在此之后什么也没发生。如果我订阅(教程中最基本的订阅),我会在我提出请求的媒介中得到回复:
< HTTP/1.1 201 Created
< Connection: Keep-Alive
< Content-Length: 0
< Location: /v2/subscriptions/5ab5248e50bfc821d0a1b1e0
< Fiware-Correlator: 45df4ff6-2eb3-11e8-912c-0242ac110003
< Date: Fri, 23 Mar 2018 16:00:14 GMT
但是,这可能是罪魁祸首,订阅状态设置为失败(请求列出所有订阅和Orion Context Explorer)。并且不能将其更改为非活动状态。一切都按预期运行(我猜)。 OCB作为Docker中的容器运行,安装在LUbuntu上,并且运行良好。这可能是我的错误,因为我使用Insomnia与OCB沟通并且可能会混合一些东西,但OCB的反应是一切都很好。任何帮助将不胜感激。
编辑: 加。服务器无法正常工作。我得到了:
* Trying 127.0.0.1...
* TCP_NODELAY set
* connect to 127.0.0.1 port 1028 failed: Connection refused
* Failed to connect to localhost port 1028: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 1028
运行check命令后(curl -vvvv localhost:1028 / accumulate)。
关于订阅我发布此有效负载:
{
"description": "A subscription to get info about Room1",
"subject": {
"entities": [
{
"id": "Room1",
"type": "Room"
}
],
"condition": {
"attrs": [
"pressure"
]
}
},
"notification": {
"http": {
"url": "http://localhost:1028/accumulate"
},
"attrs": [
"temperature"
]
},
"expires": "2040-01-01T14:00:00.00Z",
"throttling": 5
}
到localhost:1026 / v2 / subscriptions URL。事先实体及其论点和类型都是正确的。创建之后,我请求获取所有订阅并获取:
[
{
"id": "5ab7d819209f52528cc2faf7",
"description": "A subscription to get info about Room1",
"expires": "2040-01-01T14:00:00.00Z",
"status": "failed",
"subject": {
"entities": [
{
"id": "Room1",
"type": "Room"
}
],
"condition": {
"attrs": [
"pressure"
]
}
},
"notification": {
"timesSent": 1,
"lastNotification": "2018-03-25T17:10:49.00Z",
"attrs": [
"temperature"
],
"attrsFormat": "normalized",
"http": {
"url": "http://localhost:1028/accumulate"
},
"lastFailure": "2018-03-25T17:10:49.00Z"
},
"throttling": 5
}
]
我猜他失败了因为没有发送通知,但我不确定。
答案 0 :(得分:1)
我在这里看到两个问题。
首先,累加器不工作。可能是一个奇怪的网络问题,它结合了IPv4名称查找(即,curl localhost:1028/accumulate
由OS解决为curl 127.0.0.1:1028/accumulate
,累加器仅在IPv6接口中监听(即仅在::1
但是不在127.0.0.1
)。我知道你在同一个主机中运行curl commmand ,累加器正在监听,不是吗?
我的推荐是使用--host
accumualtor参数(例如--host 127.0.0.1
)并在curl命令中使用直接IP以使其正常工作。
第二个问题是由于您使用localhost
作为通知终点:
"url": "http://localhost:1028/accumulate"
这意味着在Orion运行的docker容器中的端口1028 。但是,据我所知,您的累加器服务器在容器外部<容器主机中运行。因此,您应该使用允许您从容器到达主机的IP(并确保没有网络流量阻止程序,例如防火墙)。所以,你的问题转化为&#34;如何从一个文件夹容器到达docker容器主机&#34; (我不确定答案,但应该有关于该主题的大量文献:)
答案 1 :(得分:0)
累积服务器需要在可用的物理接口上运行。简单地说,使用环回接口与作为Docker容器运行的Orion Context Broker进行交互几乎是不可能的。可以肯定的是,就运行主机的主机而言,虚拟化已经就位(根据我的情况)。
可用
在linux中检查可用的接口 ip addr
在选择了符合我们要求的设备后,我们按照之前的说明运行了累加器,但是它的ip地址是我们选择的。然后,我们使用启动acc时使用的地址向OCB添加订阅。服务器,一切顺利,沟通还可以。