tcalmant / ipopo

iPOPO: a Service-Oriented Component Model for Python
https://ipopo.readthedocs.io/
Apache License 2.0
69 stars 28 forks source link

RSA Xml-RCP Client not working #105

Closed acutaia closed 5 years ago

acutaia commented 5 years ago

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?

scottslewis commented 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.

scottslewis commented 5 years ago

Has you had a chance to try out configuring the HTTP_HOSTNAME as described in previous comment?

acutaia commented 5 years ago

Yeah yeah, i've built one etcd of my own, and now it works perfectly. Thank you

scottslewis commented 5 years ago

Good to hear it's working for you. Thanks for the report.