官术网_书友最值得收藏!

Seeing the lookup in action

Now, we are all set to run the product client. To recap, at this stage, we have a Eureka server project and a product project with the following structure:

Let's take a few minutes to review what we did:

  1. We created a Maven project and defined the starters and dependencies.
  2. We created the YML files for bootstrapping and application properties.
  3. We created the ProductSpringApp class containing the main method that is the starting point of the applications.
  4. For the product project, we had the following classes:
    • Product: The domain or entity which we will enhance later
    • ProductService: The microservice responsible for implementing the services and APIs
    • ProductClient: The client to test out the service lookup

Now, let's see it in action:

  1. Run the EurekaApplication class (or run a Maven build on the eureka-server project). Observe the last few lines in the logs:
  1. Run the ProductSpringApp class (or run a Maven build on the product project). Note the last few lines in the the log:
  1. Access the product service directly at: http://localhost:8081/dev/product/4.

    You will see the following response:

{"id":4,"name":"Oranges ","catId":2}
  1. Now, access the client URL, http://localhost:8081/client/4 , which does a lookup of the product service from the service registry and directs it to the respective product service.

    You will see the following response:

 {"id":4,"name":"Oranges ","catId":2}

You may see an internal server error (No instances available for PRODUCT). This can happen while the heartbeat completes and the addresses are re-picked by the Ribbon load balancer. Wait a few seconds for the registry to update and then try again.

A lot has happened under the hood in getting this response:

  1. The HTTP request to get /client/4 was handled by the getProduct method in the ProductClient class.
  2. It did a lookup of the service from the Eureka registry. This is where we find log statements as follows:
c.n.l.DynamicServerListLoadBalancer: Using serverListUpdater PollinServerListUpdater
c.netflix.config.ChainedDynamicProperty: Flipping property: PRODUCT.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer
c.n.l.DynamicServerListLoadBalancer: DynamicServerListLoadBalancer for client PRODUCT intiated: DynamicServerListLoadBalancer:
  1. After it did the lookup, it forwarded the request to the actual ProductService through the Ribbon load balancer library.

This was just a simple mechanism of a client invoking services through a dynamic lookup. In later chapters, we will add functionality to make it resilient and functional in terms of getting data from the database.

主站蜘蛛池模板: 大方县| 马鞍山市| 阿拉善左旗| 潮州市| 新干县| 肇东市| 金堂县| 沐川县| 合水县| 卓资县| 南充市| 高平市| 莱芜市| 志丹县| 墨玉县| 抚远县| 萨迦县| 夹江县| 观塘区| 康乐县| 彰化县| 泸西县| 若尔盖县| 上虞市| 沅陵县| 安丘市| 故城县| 全南县| 眉山市| 永宁县| 四川省| 通河县| 房产| 长岭县| 左云县| 永清县| 石林| 北海市| 乐至县| 德清县| 成安县|