Closed acutaia closed 5 years ago
Hi. I assume that you've taken a look at this tutorial:
https://ipopo.readthedocs.io/en/latest/tutorials/rsa_xmlrpc.html#rsa-tutorial-xmlrpc
It shows how to export/import a remote service using console commands (i.e. with no discovery) on a single host starting at the section: Exporting the XmlRpcHelloImpl as a Remote Service.
Note that unfortunately our etcd server at disco.ecf-project.org is not available. I will try to get it running again for general usage/testing.
It looks as though your remote service host (i.e. the instance exporting the remote service) might not be setting the http hostname/port. In both run_rsa_xmlrpc.py and run_rsa_etcd_xmlrpc.py samples are these lines that start/setup the http server
with use_ipopo(framework.get_bundle_context()) as ipopo:
ipopo.instantiate(
"pelix.http.service.basic.factory",
"http-server",
{"pelix.http.address": HTTP_HOSTNAME, "pelix.http.port": HTTP_PORT},
)
and toward the top of the run_rsa_xmlrpc.py file the HTTP_HOSTNAME and HTTP_PORT are set:
HTTP_HOSTNAME = "127.0.0.1" HTTP_PORT = 8181
On the remote service exporter host, the HTTP_HOSTNAME should be set to either an IP address or hostname that can be reached from the consumer. Whatever is specified here will be what is given in the edef and published via discovery. I suspect that your consumer was getting: http:/127.0.0.1/xml-rpc (the default), and although it was able to connect to 127.0.0.1 it was connecting to itself/localhost rather than to the remote service host.
If that's what's happening for you, then if you config the correct HTTP_HOSTNAME for your remote service host, then this should be sent via edef -> etcd discovery -> import on consumer and then url should be correct for your consumer to reach your server rather than connecting to localhost/127.0.0.1.
Has you had a chance to try out configuring the HTTP_HOSTNAME as described in previous comment?
Yeah yeah, i've built one etcd of my own, and now it works perfectly. Thank you
Good to hear it's working for you. Thanks for the report.
Hi, I tried to use your example of the implementation of a RSAXmlrpc with etcd between two instances on two IPOPO frameworks, running on two separated machines. But it gave me the following error in the client: $ Component 'remote-hello-consumer': error calling @ValidateComponent callback Traceback (most recent call last): File "/home/ferrera/.local/lib/python3.6/site-packages/pelix/ipopo/instance.py", line 681, in safe_validation_callback return self.validation_callback(event) File "/home/ferrera/.local/lib/python3.6/site-packages/pelix/ipopo/instance.py", line 590, in __validation_callback result = comp_callback(self.instance, *mapped_args) File "/home/ferrera/Code/ipopo-etcd/helloconsumer.py", line 18, in _validate resp = self._helloservice.sayHello(self._name + 'Sync', self._msg) File "/usr/lib/python3.6/xmlrpc/client.py", line 1112, in call return self.send(self.name, args) File "/usr/lib/python3.6/xmlrpc/client.py", line 1452, in request verbose=self.verbose File "/usr/lib/python3.6/xmlrpc/client.py", line 1154, in request return self.single_request(host, handler, request_body, verbose) File "/usr/lib/python3.6/xmlrpc/client.py", line 1187, in single_request dict(resp.getheaders()) xmlrpc.client.ProtocolError: <ProtocolError for 0.0.0.0:8181/xml-rpc: 404 Not Found>
Why do I always see the error “404 Not Found”? How do I configure the HTTP?