शुभ दिवस,

इस समय मैं एक बहुत ही सरल गेटवे पर काम कर रहा हूं जिसे (अभी के लिए) केवल आने वाले HTTP POST और GET अनुरोधों को पुनर्निर्देशित करने की आवश्यकता है।

सेटअप:

  • यूरेका सर्वर: वह स्थान जहां मेरे स्प्रिंग बूट माइक्रोसर्विसेज पंजीकृत हैं;
  • स्प्रिंग गेटवे: आने वाले सभी HTTP POST और GET अनुरोधों को मैप करता है और उन्हें उचित माइक्रोसर्विस पर रूट करता है;
  • स्प्रिंग बूट माइक्रोसर्विसेज: अनुरोध के अनुसार बस कुछ चीजें करना :)

नोट: मैं इस गेटवे सामान के लिए थोडा नया हूँ, बस आप जानते हैं :)।

माइक्रोसर्विस यूरेका सर्वर के साथ ठीक पंजीकृत है। इसका वेब आधारित जीयूआई मुझे दिखाता है कि उदाहरण "माई-माइक्रो-सर्विस" यूरेका सर्वर के साथ पंजीकृत है। अन्य (स्प्रिंग बूट) सेवाएं बिना किसी समस्या के उस नाम ("MY-MICRO-SERVICE") का उपयोग कर सकती हैं, इसलिए उनके लिए यह ठीक काम करता है। बस यह गेटवे इंस्टेंस नाम को संभाल नहीं सकता है; ऐसा लगता है कि यह केवल आईपी पते स्वीकार करता है (जिसे मैं सिर्फ रोकना चाहता हूं, क्योंकि माइक्रोसर्विस सर्वर से बदल सकता है और उनके आईपी पते के लिए)। और यूरेका सर्वर केवल आईपी पतों को अनुमति देने/उपयोग करने के लिए कॉन्फ़िगर नहीं किया गया है।


समस्या:

जब गेटवे में माइक्रोसर्विस का IP पता रखने वाला मार्ग होता है तो सभी सुचारू रूप से चलते हैं। लेकिन मैं चाहता हूं कि गेटवे को यूरेका सर्वर से सर्विस आईडी को हल करने दें। और अगर मैं ऐसा करता हूं, तो यह मुझे एक java.net.UnknownHostException: MY-MICRO-SERVICE: Temporary failure in name resoultion फेंकता है।


प्रश्न:

अब मैं स्प्रिंग गेटवे में स्प्रिंग एप्लिकेशन "माई-माइक्रो-सर्विस" (पंजीकृत स्प्रिंग बूट माइक्रोसर्विस होने के नाते) के नाम का उपयोग क्यों नहीं कर सकता (जबकि वह निर्माण अन्य माइक्रोसर्विसेज में उपयोग किए जाने पर ठीक काम करता है)? क्या कोई Yaml कॉन्फ़िग फ़ाइल ऐसे इंस्टेंस नामों को संभाल नहीं सकती है, केवल IP पते?


विवरण

गेटवे ज्यादातर yaml कॉन्फ़िग फ़ाइल के माध्यम से कॉन्फ़िगर किया गया है। केवल एक साधारण जावा वर्ग है जो गेटवे एप्लिकेशन को प्रारंभ करता है। रूटिंग yaml कॉन्फ़िग फ़ाइल में पूरी तरह से सेट है।

स्प्रिंग गेटवे एप्लिकेशन क्लास

@SpringBootApplication
@EnableEurekaClient
public class MyGatewayApplication {

  public static void main(String[] args) {
    SpringApplication.run(MyGatewayApplication.class, args);
  }
}

गेटवे Yaml कॉन्फ़िगरेशन फ़ाइल (application.yml)

spring:
  application:
    name: my-gateway
  cloud:
    gateway:
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedOrigins: "*"
            allowedMethods:
              - GET
              - POST
      routes:
        - id: my_route
          uri: http://MY-MICRO-SERVICE
          predicates:
            - Path=/test/**
server:
  port: 8999

info:
  app:
    properties: dev

त्रुटि

java.net.UnknownHostException: MY-MICRO-SERVICE: Temporary failure in name resolution
    at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:na]
    at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:929) ~[na:na]
    at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1515) ~[na:na]
    at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:848) ~[na:na]
    at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1505) ~[na:na]
    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1364) ~[na:na]
    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1298) ~[na:na]
    at java.base/java.net.InetAddress.getByName(InetAddress.java:1248) ~[na:na]
    at io.netty.util.internal.SocketUtils$8.run(SocketUtils.java:146) ~[netty-common-4.1.36.Final.jar:4.1.36.Final]
...
1
Tensineer 11 पद 2020, 23:56

1 उत्तर

सबसे बढ़िया उत्तर

मुद्दा तय किया गया है।

मैंने "http" को "lb" प्रोटोकॉल में बदल दिया और इससे मेरी समस्या ठीक हो गई। मेरी समझ से, "lb" का अर्थ लोडबैलेंसिंग है। मेरे पास मेरी स्थानीय मशीन पर कोई लोडबैलेंसर सक्रिय नहीं है, लेकिन वैसे भी: यह काम करता है।

   - POST
      routes:
        - id: my_route
          uri: lb://MY-MICRO-SERVICE
          predicates:
            - Path=/test/**
0
Tensineer 14 पद 2020, 14:15