กำหนดค่าข้อผิดพลาดในการทำให้ใช้งานได้ไม่สำเร็จ

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

ลักษณะปัญหา

การทำให้ใช้งานได้ของการแก้ไขพร็อกซี API หรือ Shared Flow ผ่าน UI ของ Edge หรือ Management API ไม่สำเร็จโดยมีข้อผิดพลาด Configuration failed

ข้อความแสดงข้อผิดพลาด

คุณจะได้รับข้อความแสดงข้อผิดพลาดใน UI ของ Edge ดังที่แสดงด้านล่าง

The revision is deployed, but traffic cannot flow.
com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}

นี่คือภาพหน้าจอของข้อความแสดงข้อผิดพลาดตัวอย่างที่พบใน UI ของ Edge

สาเหตุที่เป็นไปได้

การทำให้ใช้งานได้ของพร็อกซี API อาจไม่สำเร็จโดยมีข้อผิดพลาด "Configuration failed" เนื่องจากสาเหตุต่างๆ มากมาย ตารางด้านล่างแสดงสาเหตุที่พบบ่อยบางประการที่ทำให้เกิดข้อผิดพลาดนี้

สาเหตุ คำอธิบาย วิธีการแก้ปัญหาที่ใช้ได้กับ
ไม่มีคลาส Java ในนโยบาย JavaCallout ไม่มีคลาส Java ในไฟล์ JAR ที่นโยบาย JavaCallout อ้างอิง ผู้ใช้ Edge Private Cloud
ใช้ตัวถูกดำเนินการไม่ถูกต้องในเงื่อนไขใน Condition Flow ตัวถูกดำเนินการ/นิพจน์ที่ใช้ในโอเปอเรเตอร์ทั้ง 2 ด้านในเงื่อนไขไม่ถูกต้อง
ชื่อโฮสต์ไม่ถูกต้องในนโยบาย Message Logging ระบบแก้ไขชื่อโฮสต์ที่ใช้ในนโยบาย MessageLogging ไม่ได้ หรือชื่อโฮสต์อาจมีสัญลักษณ์พิเศษที่ไม่ต้องการ
ชื่อ KeyValueMap ไม่ถูกต้อง KeyValueMap ไม่ถูกต้องหรือว่างเปล่าในนโยบาย KeyValueMapOperations ในพร็อกซี API

ขั้นตอนการวินิจฉัยที่พบบ่อย

  1. รับสถานะการทำให้ใช้งานได้สำหรับการแก้ไขที่เฉพาะเจาะจงของพร็อกซี API ที่คุณพบข้อผิดพลาดในการทำให้ใช้งานได้โดยใช้ API ด้านล่าง

    curl -v <management-server-host>:<port#>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
    
  2. นี่คือตัวอย่างเอาต์พุตจาก API ด้านบน

    "server" : [ { 
    "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", 
    "status" : "error", 
    "type" : [ "message-processor" ], 
    "uUID" : "0a20926c-f4bf-401b-af84-05fd84b9f492" 
    }, { 
    "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", 
    "status" : "error", 
    "type" : [ "message-processor" ], 
    "uUID" : "f2ee6ab4-a108-4465-a7ba-b56530d8e3fc" 
    }, { 
    "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", 
    "status" : "error", 
    "type" : [ "message-processor" ], 
    "uUID" : "0f41991e-b310-4e77-aac5-5fdb150ef9f6" 
    },
    
  3. คุณจะเห็นข้อความแสดงข้อผิดพลาด "Configuration failed" ใน Message Processor แต่ละรายการในเอาต์พุตสถานะการทำให้ใช้งานได้

  4. เข้าสู่ระบบ Message Processor อย่างน้อย 1 รายการ แล้วตรวจสอบบันทึก /opt/apigee/var/log/edge-message-processor/logs/system.log ดูว่ามีข้อผิดพลาดเกิดขึ้นระหว่างการทำให้ใช้งานได้ของพร็อกซี API หรือไม่

  5. คุณต้องทำตามขั้นตอนการแก้ปัญหาและการแก้ปัญหาที่เหมาะสมสำหรับปัญหาที่พบในบันทึกของ Message Processor

  6. ส่วนด้านล่างนี้แสดงข้อยกเว้นที่พบบ่อยที่สุดบางรายการที่ทำให้เกิดข้อผิดพลาดในการทำให้ใช้งานได้ "Configuration failed" และแสดงขั้นตอนในการแก้ปัญหาและแก้ไขข้อยกเว้นเหล่านั้น

สาเหตุ: ไม่มีคลาส Java ในนโยบาย JavaCallout

การวินิจฉัย

  1. ในบันทึกของ Message Processor หากคุณเห็นข้อยกเว้นที่มีข้อความ "Failed to instantiate the JavaCallout Class" ระหว่างการทำให้ใช้งานได้ของพร็อกซี API (DeployEvent) ดังที่แสดงด้านล่าง ให้ไปที่ขั้นตอนที่ 2 หากไม่เห็น ให้ไปที่ ใช้ตัวถูกดำเนินการไม่ถูกต้องในเงื่อนไขใน Condition Flow
  2. Message Processor แสดงข้อยกเว้นต่อไปนี้ระหว่างการทำให้ใช้งานได้ของพร็อกซี API

    2017-10-10 05:02:42,330 Apigee-Main-5 ERROR MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : error configuring config events [DeployEvent{organization='myorg', application='oauth2', applicationRevision='14', deploymentSpec=basepath=/;env=dev;, deploymentID=null}] 
    com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class com.something.apigee.callout.crypto.main.SecretCallout 
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:89) ~[javacallout-1.0.0.jar:na] 
    at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:230) ~[message-processor-1.0.0.jar:na] 
    
    <snipped>
    
  3. ข้อความแสดงข้อผิดพลาดในข้อยกเว้นด้านบนระบุว่าระบบสร้างอินสแตนซ์ของคลาส JavaCallout com.something.apigee.callout.crypto.main.SecretCallout ไม่ได้ ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อคลาสที่เฉพาะเจาะจงไม่พร้อมใช้งานในไฟล์ JAR ที่ระบุไว้ในนโยบาย JavaCallout หรือไฟล์ JAR ที่ขึ้นอยู่กับไฟล์นั้น

  4. ตรวจสอบไฟล์ JAR ที่มีคลาสทั้งหมดที่เกี่ยวข้องกับแพ็กเกจ com.something.apigee.callout.crypto.main และยืนยันว่าไม่มีคลาสที่เฉพาะเจาะจง com.something.apigee.callout.crypto.main.SecretCallout

ความละเอียด

  1. เพิ่มคลาสที่ขาดหายไปลงในไฟล์ JAR ที่เฉพาะเจาะจง แล้วอัปโหลดไฟล์ JAR
  2. ทำให้พร็อกซี API ใช้งานได้อีกครั้ง
  3. ในตัวอย่างด้านบน เราแก้ปัญหาโดยทำดังนี้
    1. เพิ่มคลาสที่ขาดหายไป com.something.apigee.callout.crypto.main.SecretCallout ลงในไฟล์ JAR
    2. อัปโหลดไฟล์ JAR ที่อัปเดตแล้วและทำให้พร็อกซี API ใช้งานได้อีกครั้ง

สาเหตุ: ใช้ตัวถูกดำเนินการไม่ถูกต้องกับโอเปอเรเตอร์ใน Condition Flow

การวินิจฉัย

  1. ในบันทึกของ Message Processor หากคุณเห็น com.apigee.expressions.parser.ParseException ระหว่างการทำให้ใช้งานได้ของพร็อกซี API หรือ Shared Flow ดังที่แสดงในข้อความตัวอย่างด้านล่าง ให้ไปที่ขั้นตอนที่ 2 หากไม่เห็น ให้ไปที่สาเหตุถัดไป ชื่อโฮสต์ไม่ถูกต้องในนโยบาย Message Logging

    ข้อความแสดงข้อผิดพลาดตัวอย่าง

    com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
    
    
  2. มาดูตัวอย่างเพื่อทำความเข้าใจวิธีวินิจฉัยปัญหานี้

    ตัวอย่าง : ตัวถูกดำเนินการสำหรับนิพจน์ <Operator> ควรเป็นนิพจน์ข้อมูล

  3. Message Processor แสดงข้อยกเว้นต่อไปนี้ระหว่างการทำให้ใช้งานได้ของ Shared Flow

    2017-11-23 09:11:04,498  Apigee-Main-6 ERROR MESSAGING.RUNTIME - AbstractConfigurator.loadXMLConfigurations() : Unable to Load default for path /organizations/myorg/apiproxies/Introspection/revisions/12/sharedflows/default
    2017-11-23 09:11:04,499  Apigee-Main-6 ERROR MESSAGING.RUNTIME - Application.sync() :  sync error for Introspection and revision 12
    2017-11-23 09:11:04,499  Apigee-Main-6 ERROR MESSAGING.RUNTIME - Application.sync() :  Actual Error
    com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
        at com.apigee.expressions.parser.ExpressionParser.buildExpressionTree(ExpressionParser.java:337) ~[expressions-1.0.0.jar:na]
        at com.apigee.expressions.parser.ExpressionParser.parse(ExpressionParser.java:24) ~[expressions-1.0.0.jar:na]
        at com.apigee.expressions.parser.ExpressionParser.parseLogicExpression(ExpressionParser.java:28) ~[expressions-1.0.0.jar:na]
        at com.apigee.messaging.runtime.Step.getExpression(Step.java:67) ~[message-processor-1.0.0.jar:na]
        at com.apigee.messaging.runtime.Step.handleAdd(Step.java:58) ~[message-processor-1.0.0.jar:na]
        at com.apigee.messaging.runtime.SharedFlowRuntime.addStep(SharedFlowRuntime.java:81) ~[message-processor-1.0.0.jar:na]  <snipped>
    
  4. ข้อความแสดงข้อผิดพลาดใน ParseException - "Both the operands for EQUALS expression should be data expressions" ระบุว่าเงื่อนไขที่เกี่ยวข้องกับโอเปอเรเตอร์เท่ากับ (=), ไม่เท่ากับ (!=) หรือ Stats with (=|) มีปัญหา

  5. ดูเงื่อนไขใน Condition Flow ทั้งหมดที่เกี่ยวข้องกับโอเปอเรเตอร์ที่เฉพาะเจาะจงซึ่งระบุไว้ในข้อความแสดงข้อผิดพลาด และดูว่ามีปัญหาต่อไปนี้หรือไม่

    1. นิพจน์ทั้ง 2 ด้านของโอเปอเรเตอร์มีประเภทเดียวกัน ตัวอย่างเช่น หากคุณมีตัวแปรสตริงทางด้านซ้ายของโอเปอเรเตอร์ คุณต้องมีตัวแปรสตริงหรือค่าสตริงอีกตัวทางด้านขวา
    2. ใช้ตัวแปรที่ถูกต้องระหว่างโอเปอเรเตอร์
    3. มีช่องว่างระหว่างโอเปอเรเตอร์กับนิพจน์แต่ละรายการ

  6. หากไม่เป็นไปตามเกณฑ์ที่กล่าวถึงข้างต้น คุณจะได้รับ ParseException - "Both the operands for EQUALS expression should be data expressions"

  7. มาดูตัวอย่างเพื่อทำความเข้าใจปัญหานี้ นี่คือเงื่อนไขข้อผิดพลาดตัวอย่าง

    <Condition>
               (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved")
    </Condition>
    
  8. ในตัวอย่างนี้ คุณจะเห็นว่าไม่มีช่องว่างระหว่างโอเปอเรเตอร์ "or" กับเงื่อนไขถัดไป ดังนั้นเมื่อมีการแยกวิเคราะห์เงื่อนไขที่ 2 ระบบจะใช้ตัวแปรแรกเป็น "or(fault.name" สำหรับโอเปอเรเตอร์ EQUALS ซึ่งไม่ใช่ชื่อตัวแปรที่ถูกต้อง ระบบจึงไม่ถือว่าเป็นนิพจน์ข้อมูลที่ถูกต้อง ด้วยเหตุนี้ คุณจึงได้รับข้อยกเว้นนี้

    com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
    
    

ความละเอียด

  1. ตรวจสอบว่าคุณมีนิพจน์ข้อมูลที่เหมาะสมทั้ง 2 ด้านของโอเปอเรเตอร์เสมอ
  2. ในตัวอย่างที่กล่าวถึงข้างต้น วิธีแก้ปัญหาคือตรวจสอบว่ามีช่องว่างหลังโอเปอเรเตอร์ "or" ตามที่อธิบายไว้ในข้อมูลโค้ด

    <Condition>
               (fault.name = "invalid_access_token") or (fault.name = "ApiKeyNotApproved")
    </Condition>
    
    

ชื่อโฮสต์ไม่ถูกต้องในนโยบาย MessageLogging

การวินิจฉัย

  1. ในบันทึกของ Message Processor หากคุณเห็นข้อยกเว้นที่มีข้อความ "Invalid HostName" ระหว่างการทำให้ใช้งานได้ของพร็อกซี API หรือ Shared Flow ดังที่แสดงด้านล่าง ให้ไปที่ขั้นตอนที่ 2 หากไม่เห็น ให้ไปที่สาเหตุถัดไป ชื่อ KeyValueMap ไม่ถูกต้อง

    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
    
  2. มาดูตัวอย่าง 2 ตัวอย่างด้านล่างเพื่อทำความเข้าใจวิธีแก้ปัญหาและแก้ไขปัญหานี้

ตัวอย่างที่ 1: ชื่อโฮสต์มีสัญลักษณ์พิเศษที่ไม่ต้องการ

  1. Message Processor แสดงข้อยกเว้นต่อไปนี้ระหว่างการทำให้ใช้งานได้ของพร็อกซี API

      2018-01-20 02:12:13,535 Apigee-Main-3 ERROR MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : error configuring config events [DeployEvent{organization='myorg', application='providersearch', applicationRevision='4', deploymentSpec=basepath=/;env=prod;, deploymentID=null}] 
      com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler 
      at com.apigee.messaging.runtime.destinations.SyslogDestination.<init>(SyslogDestination.java:44) ~[message-processor-1.0.0.jar:na] 
      at com.apigee.messaging.runtime.destinations.SysLoggerFactory.getInstance(SysLoggerFactory.java:39) ~[message-processor-1.0.0.jar:na]
      at com.apigee.messaging.runtime.destinations.DestinationRegistry.newDestination(DestinationRegistry.java:44) ~[message-processor-1.0.0.jar:na] 
      ...<snipped>
    
  2. ข้อยกเว้นด้านบนแสดงว่าการทำให้ใช้งานได้ไม่สำเร็จเนื่องจาก "Invalid HostName '<hostname>' for Syslog handler" ซึ่งบ่งชี้ว่าชื่อโฮสต์ที่ใช้ในนโยบาย MessageLogging เป็นชื่อโฮสต์ที่ไม่ถูกต้อง

  3. การตรวจสอบข้อยกเว้นในบันทึกของ Message Processor อย่างละเอียดแสดงให้เห็นว่ามีสัญลักษณ์พิเศษ "/" ที่ไม่ต้องการอยู่ที่ส่วนท้ายของชื่อโฮสต์ 'splunkprod.myorg.com/'.

  4. สัญลักษณ์พิเศษที่ไม่ต้องการนี้เป็นสาเหตุของข้อผิดพลาดในการทำให้ใช้งานได้

ความละเอียด

  1. แก้ไขนโยบาย MessageLogging เพื่อนำสัญลักษณ์พิเศษที่ไม่ต้องการออกเพื่อแก้ปัญหา
  2. ในตัวอย่างด้านบน เรานำสัญลักษณ์พิเศษ "/" ออกจากนโยบาย MessageLogging ซึ่งเป็นการแก้ปัญหา

ตัวอย่างที่ 2: ชื่อโฮสต์ที่แก้ไขไม่ได้

  1. บันทึกของ Message Processor มี 2-3 บรรทัดที่แสดงว่าระบบทริกเกอร์เหตุการณ์การทำให้ใช้งานได้สำหรับพร็อกซี API ซึ่งตามด้วยข้อยกเว้นที่เกิดขึ้นระหว่างการทำให้ใช้งานได้ของพร็อกซี API

    2017-12-22 00:13:49,057 Apigee-Main-87446 INFO MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : configuring [DeployEvent{organization='myorg', application='myapi', applicationRevision='42', deploymentSpec=basepath=/;env=dev;, deploymentID=null}] 
    
    2017-12-22 00:13:49,318 Apigee-Main-87446 ERROR c.a.p.h.d.DNSCachedAddress - DNSCachedAddress.refresh() : Unable to resolve host : input-prd.cloud.splunk.com: Name or service not known 
    
    2017-12-22 00:13:49,323 Apigee-Main-87446 ERROR MESSAGING.RUNTIME - AbstractConfigurator.handleUpdate() : Fatal error deploying proxy: {} 
    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'input-prd.cloud.splunk.com' for Syslog handler 
    at com.apigee.messaging.runtime.destinations.SyslogDestination.<init>(SyslogDestination.java:44) ~[message-processor-1.0.0.jar:na] 
    at com.apigee.messaging.runtime.destinations.SysLoggerFactory.getInstance(SysLoggerFactory.java:39) ~[message-processor-1.0.0.jar:na] 
    at com.apigee.messaging.runtime.destinations.DestinationRegistry.newDestination(DestinationRegistry.java:44) ~[message-processor-1.0.0.jar:na] 
    at com.apigee.steps.messagelogging.MessageLoggingStepDefinition.populateDestinations(MessageLoggingStepDefinition.java:118) ~[message-logging-1.0.0.jar:na] 
    at com.apigee.steps.messagelogging.MessageLoggingStepDefinition.handleAdd(MessageLoggingStepDefinition.java:99) ~[message-logging-1.0.0.jar:na] 
    
    <snipped> 
    
  2. ข้อยกเว้นด้านบนแสดงว่าการทำให้ใช้งานได้ไม่สำเร็จเนื่องจาก "Invalid HostName '<hostname>' for Syslog handler"

  3. หากอ่านบรรทัดเหนือข้อยกเว้น คุณจะเห็นว่า Message Processor แก้ไขชื่อโฮสต์ 'input-prd.cloud.splunk.com' ที่ระบุไว้ในนโยบาย MessageLogging ไม่ได้

  4. หากต้องการยืนยัน ให้ลอง Telnet ไปยังชื่อโฮสต์และพอร์ต # ที่ใช้ในนโยบาย Message Logging

    1. ตรวจสอบนโยบาย MessageLogging ในการแก้ไขที่เฉพาะเจาะจงของพร็อกซี API และยืนยันชื่อโฮสต์และพอร์ต # ที่ใช้ ในตัวอย่างด้านบน ชื่อพร็อกซี API คือ myapi และการแก้ไขคือ 42

      นโยบาย MessageLogging

        <MessageLogging async="false" continueOnError="false" enabled="true" name="Log-To-Splunk">
            <DisplayName>Log-To-Splunk</DisplayName>
            <Syslog>
                <Message>Message.id = {request.header.id}</Message>
                <Host>input-prd.cloud.splunk.com</Host>
                <Port>2900</Port>
                <Protocol>TCP</Protocol>
                <SSLInfo>
                    <Enabled>true</Enabled>
                </SSLInfo>
            </Syslog>
        </MessageLogging>
      
    2. Telnet ไปยังโฮสต์ที่มีพอร์ตที่เฉพาะเจาะจง ในตัวอย่างนี้ เราลอง Telnet และได้รับข้อผิดพลาดเดียวกันกับที่เห็นในบันทึกของ Message Processor

      telnet input-prd.cloud.splunk.com 2900 
      telnet: input-prd.cloud.splunk.com: Name or service not known 
      input-prd.cloud.splunk.com: Host name lookup failure
      
  5. ซึ่งพิสูจน์ได้อย่างชัดเจนว่าระบบแก้ไขชื่อโฮสต์ไม่ได้

ความละเอียด

  1. แก้ไขนโยบาย MessageLogging เพื่อใช้ชื่อโฮสต์ที่ถูกต้อง

หากปัญหายังคงอยู่ ให้ไปที่ ข้อมูลการวินิจฉัยที่ต้องรวบรวม

สาเหตุ: ชื่อ KeyValueMap ไม่ถูกต้อง

การวินิจฉัย

  1. ในบันทึกของ Message Processor หากคุณเห็นข้อยกเว้นที่มีข้อความ "KeyValueMap name is invalid" ระหว่างการทำให้ใช้งานได้ของพร็อกซี API หรือ Shared Flow ดังที่แสดงด้านล่าง ให้ไปที่ขั้นตอนที่ 2 หากไม่เห็น ให้ไปที่ ข้อมูลการวินิจฉัยที่ต้องรวบรวม

    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
    
  2. มาดูตัวอย่างเพื่อทำความเข้าใจวิธีแก้ปัญหาและแก้ไขปัญหานี้

  3. บันทึกของ Message Processor ตัวอย่าง ที่แสดงข้อยกเว้นที่มีข้อความ "KeyValueMap name is invalid" ซึ่งทำให้เกิดข้อผิดพลาดระหว่างการทำให้ใช้งานได้ของพร็อกซี API

    2018-02-27 14:14:50,318  Apigee-Main-6 ERROR MESSAGING.RUNTIME - AbstractConfigurator.handleUpdate() : Fatal error deploying proxy: {}
    com.apigee.keyvaluemap.KeyValueMapApiException: KeyValueMap name  is invalid
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.validateMapName(KeyValueMapServiceImpl.java:125) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.createOrUpdateKeyValueMap(KeyValueMapServiceImpl.java:185) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.digest(KeyValueMapOperationsStepDefinition.java:180) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.handleAdd(KeyValueMapOperationsStepDefinition.java:197) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.entities.AbstractConfigurator.handleUpdate(AbstractConfigurator.java:130) [config-entities-1.0.0.jar:na]
            at com.apigee.messaging.runtime.Application.handleUpdate(Application.java:229) [message-processor-1.0.0.jar:na]
    
    2018-02-27 14:14:50,344  Apigee-Main-6 ERROR BOOTSTRAP - RuntimeConfigurationServiceImpl.dispatchToListeners() : RuntimeConfigurationServiceImpl.dispatchToListeners : Error occurred while dispatching the request DeployEvent{organization='myorg', application='CustomerAPI', applicationRevision='1', deploymentSpec=basepath=/;env=test;, deploymentID=null} to com.apigee.application.bootstrap.listeners.MessageProcessorBootstrapListener@5009d06e
    com.apigee.keyvaluemap.KeyValueMapApiException: KeyValueMap name  is invalid
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.validateMapName(KeyValueMapServiceImpl.java:125) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.createOrUpdateKeyValueMap(KeyValueMapServiceImpl.java:185) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.digest(KeyValueMapOperationsStepDefinition.java:180) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.handleAdd(KeyValueMapOperationsStepDefinition.java:197) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.entities.AbstractConfigurator.handleUpdate(AbstractConfigurator.java:130) ~[config-entities-1.0.0.jar:na]
            at com.apigee.messaging.runtime.Application.handleUpdate(Application.java:229) ~[message-processor-1.0.0.jar:na]
    
  4. ข้อยกเว้นที่ 2 ด้านบนระบุว่าข้อผิดพลาดในการทำให้ใช้งานได้เกิดขึ้นสำหรับพร็อกซี API: CustomerAPI, การแก้ไข: 1

  5. เมื่อตรวจสอบ Stacktrace คุณจะเห็นว่าระบบแสดงข้อผิดพลาดขณะดำเนินการนโยบาย KeyValuMapOperations

  6. เมื่อดูบันเดิลพร็อกซี API คุณจะเห็นว่ามีนโยบาย KeyValuMapOperations 1 รายการที่มีโค้ดดังที่แสดงด้านล่าง

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Pulling-Keys" mapIdentifier="">
     <DisplayName>Pulling Keys</DisplayName>
     <Properties/>
     <ExclusiveCache>false</ExclusiveCache>
    
    
  7. ดังที่เห็นด้านบน mapIdentifier ซึ่งระบุชื่อของ KeyValueMap มีสตริงว่างเปล่า ชื่อ KeyValueMap ต้องไม่ใช่สตริงว่างเปล่า ซึ่งเป็นสาเหตุของข้อผิดพลาดในการทำให้ใช้งานได้

ความละเอียด

  1. แก้ไขนโยบาย KeyValueMapOperations ให้มีชื่อที่ถูกต้องสำหรับ KeyValueMap
  2. ในตัวอย่างด้านบน เราแก้ปัญหาโดยแก้ไข KeyValueMapOperations ให้มีชื่อ KeyValueMap เป็น "MyKeyValueMap" ดังที่แสดงด้านล่าง

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Pulling-Keys" mapIdentifier="MyKeyValueMap">
        <DisplayName>Pulling Keys</DisplayName>
        <Properties/>
        <ExclusiveCache>false</ExclusiveCache>
    

ข้อมูลการวินิจฉัยที่ต้องรวบรวม

หากปัญหายังคงอยู่แม้จะทำตามวิธีการข้างต้นแล้ว โปรดรวบรวมข้อมูลการวินิจฉัยต่อไปนี้ ติดต่อทีมสนับสนุนของ Apigee Edge และแจ้งข้อมูลที่รวบรวมไว้

  1. เอาต์พุตของคำสั่ง

    curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
    
  2. บันทึกของ Message Processor

    /opt/apigee/var/log/edge-message-processor/logs/system.log
    
  3. รายละเอียดเกี่ยวกับส่วนต่างๆ ในเพลย์บุ๊กนี้ที่คุณได้ลองทำแล้ว รวมถึงข้อมูลเชิงลึกอื่นๆ ที่จะช่วยให้เราแก้ปัญหานี้ได้อย่างรวดเร็ว