شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
علامت
برنامهی کلاینت، کد وضعیت HTTP 404 را به همراه پیام Not Found و پیام خطای Unable to identify proxy for host: VIRTUAL_HOST and url: PATH به عنوان پاسخی به فراخوانیهای API دریافت میکند.
این خطا به این معنی است که Edge نتوانسته پروکسی API را برای میزبان مجازی و مسیر مشخص شده پیدا کند.
پیام خطا
کد وضعیت HTTP زیر را دریافت خواهید کرد:
HTTP/1.1 404 Not Found
همچنین یک پیام خطا مشابه آنچه در زیر نشان داده شده است مشاهده خواهید کرد:
{
"fault":{
"faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token",
"detail":{
"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
}
}
} پیام خطای فوق نشان میدهد که Edge نتوانسته پروکسی API را برای میزبان مجازی default و مسیر /oauth2/token پیدا کند.
علل احتمالی
برخی از دلایل احتمالی این خطا در زیر ذکر شده است:
| علت | توضیحات | دستورالعملهای عیبیابی قابل اجرا برای |
|---|---|---|
| پروکسی API با میزبان مجازی خاص مرتبط نیست | پروکسی API خاص برای پذیرش درخواستها روی میزبان مجازی مشخص شده در پیام خطا پیکربندی نشده است. | کاربران فضای ابری عمومی و خصوصی Edge |
| میزبان مجازی در نسخه جدید پروکسی API که به تازگی مستقر شده است، حذف شد. | حذف میزبان مجازی از نسخه جدید پیادهسازی شده در حالی که کلاینت هنوز از میزبان مجازی خاص استفاده میکند، میتواند باعث این مشکل شود. | کاربران فضای ابری عمومی و خصوصی Edge |
| مسیر با هیچ پروکسی API مرتبط نیست | پروکسی API خاص برای پذیرش درخواستها در مسیر مشخص شده در پیام خطا پیکربندی نشده است. | کاربران فضای ابری عمومی و خصوصی Edge |
| پروکسی API در محیطی مستقر نشده است | پروکسی API خاص در محیط خاصی که شما سعی در ایجاد درخواستهای API دارید، مستقر نشده است. | کاربران فضای ابری عمومی و خصوصی Edge |
| محیط روی پردازشگر پیام بارگذاری نشده است | محیط خاص (که در آن سعی در ایجاد درخواستهای API دارید) به دلیل وجود خطا، روی پردازندههای پیام بارگذاری نشده است. | کاربران فضای ابری خصوصی اج |
| پروکسی API روی یک یا چند پردازنده پیام مستقر نشده است | ممکن است پروکسی API به دلیل عدم اطلاعرسانی رویداد در حین استقرار، روی یک یا چند پردازنده پیام مستقر نشود. | کاربران فضای ابری خصوصی اج |
مراحل تشخیص مشترک
گزارشهای NGINX و Message Processor در عیبیابی خطای 404 مفید خواهند بود. برای بررسی گزارشها از مراحل زیر استفاده کنید:
- با استفاده از دستور زیر، لاگهای NGINX را مشاهده کنید:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- فیلدهای زیر را در ورودیهای لاگ بررسی کنید:
میدان ارزش Upstream_status, status404X-Apigee-fault-codemessaging.adaptors.http.flow.ApplicationNotFoundشناسه پیام را از گزارشها یادداشت کنید.
- لاگهای پردازشگر پیام (
/opt/apigee/var/log/edge-message-processor/logs/system.log)را بررسی کنید تا ببینید آیاmessaging.adaptors.http.flow.ApplicationNotFoundبرای API خاص دارید یا اینکه آیا شناسه پیام منحصر به فرد از مرحله 2 را برای درخواست API دارید یا خیر.نمونه پیام خطا از گزارش پردازشگر پیام
NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/weather, message Id:null, exception:com.apigee.rest.framework.ResourceNotFoundException{ code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather, associated contexts = []}, context:Context@342ea86b input=ClientInputChannel(SSLClientChannel[Accepted: Remote:10.123.123.123:8443 Local:10.135.33.68:62092]@1206954 useCount=1 bytesRead=0 bytesWritten=0 age=1ms lastIO=0ms isOpen=true)
لاگ بالا کد خطا و پیام خطا را به شرح زیر نشان میدهد:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
علت: پروکسی API با میزبان مجازی خاص مرتبط نیست
اگر پروکسی API برای پذیرش درخواستهای مربوط به میزبان مجازی خاص پیکربندی نشده باشد، ممکن است با خطای 404 Not Found با پیام خطای Unable to identify proxy for host: VIRTUAL_HOST and url: PATH .
تشخیص
- پیکربندی Proxy Endpoint را برای پروکسی API بررسی کنید و ببینید آیا پروکسی API برای پذیرش درخواستهای میزبان مجازی مشخص شده در خطا پیکربندی شده است یا خیر. این موضوع با عنصر
VirtualHostنشان داده شده است. برای درک این موضوع، بیایید به یک نمونه پیکربندیProxyEndpointنگاهی بیندازیم.نمونه پیکربندی Proxy Endpoint که نشان میدهد پروکسی API درخواستها را در یک میزبان مجازی امن میپذیرد

- فرض کنید میزبانهای مجازی در محیط خاص به صورت زیر تعریف شدهاند:
نام بندر نام مستعار میزبان default80myorg-prod.apigee.netsecure443myorg-prod.apigee.net - شما با استفاده از آدرس اینترنتی
http://myorg-prod.apigee.net/weatherیک درخواست API بهVirtualHostdefaultارسال میکنید. - از آنجایی که
ProxyEndpointهمانطور که در مثال بالا نشان داده شده است،VirtualHostdefaultندارد، کد پاسخ404را با پیام خطای زیر دریافت میکنید:{"fault":{"faultstring":"Unable to identify proxy for host: default and url: \/weather","detail":{"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"}}} - برای حل این مشکل به بخش حل مشکل در پایین صفحه مراجعه کنید.
- اگر
ProxyEndpointطوری پیکربندی شده باشد که درخواستها را رویVirtualHostdefaultبپذیرد، به دلیل بعدی بروید - مسیر با هیچ پروکسی API مرتبط نیست .
وضوح تصویر
- برای رفع مشکل
VirtualHostاز دست رفته را به پیکربندیProxyEndpointاضافه کنید. برای مثال نشان داده شده در بالا، میتوانیدVirtualHostپیشفرض را به صورت زیر به پیکربندیProxyEndpointاضافه کنید:<VirtualHost>default</VirtualHost>
نمونه پیکربندی Proxy Endpoint که نشان میدهد پیشفرض > VirtualHost > اضافه شده است

- از طرف دیگر، در مثالی که در بالا به آن اشاره شد، اگر قصد داشتید فقط از
VirtualHostsecureبرای این پروکسی API خاص استفاده کنید، درخواستهای API را فقط با استفاده از پروتکل HTTPS بهVirtualHostsecureارسال کنید:https://myorg-prod.apigee.net/weather
علت: میزبان مجازی در نسخه جدید پروکسی API حذف شد.
اگر پس از حذف یک میزبان مجازی خاص (که بخشی از نسخه قبلی بود) که هنوز توسط کلاینتها برای ارسال درخواستهای API استفاده میشود، نسخهی جدیدی از پروکسی API پیادهسازی شود، میتواند باعث این مشکل شود.
تشخیص
- پیکربندی Proxy Endpoint مربوط به پروکسی API را بررسی کنید تا ببینید آیا پروکسی API برای پذیرش درخواستهای مربوط به میزبان مجازی مشخص شده در خطا پیکربندی شده است یا خیر. این موضوع توسط عنصر
VirtualHostدر پیکربندیProxyEndpointنشان داده شده است. - اگر میزبان مجازی مشخص شده در خطا در پیکربندی
ProxyEndpointوجود ندارد، مراحل زیر را انجام دهید. در غیر این صورت، به دلیل بعدی بروید - مسیر با هیچ پروکسی API مرتبط نیست . - پیکربندی
ProxyEndpointنسخه قبلی پیادهسازی شده را با نسخه فعلی پیادهسازی شده مقایسه کنید.- برای مثال، فرض کنید نسخه قبلی پیادهسازی شده شما
5و نسخه فعلی پیادهسازی شده شما6است:- میزبانهای مجازی در Proxy Endpoint در نسخه ۵ پیکربندی شدهاند
- میزبانهای مجازی در Proxy Endpoint در نسخه ۶ پیکربندی شدهاند
<HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>vh1</VirtualHost> </HTTPProxyConnection><HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection> - در مثال بالا،
VirtualHost vh1درrevision 5,اما درrevision 6حذف شده و باVirtualHost secureجایگزین شده است. - بنابراین اگر شما یا کلاینتهایتان با استفاده از
VirtualHost vh1(که بخشی ازrevision 5بود) درخواستهایی را به این پروکسی API ارسال میکنید، کد پاسخ404را با پیام خطای زیر دریافت خواهید کرد:{"fault":{"faultstring":"Unable to identify proxy for host: vh1 and url: \/weather","detail":{"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"}}}
- برای مثال، فرض کنید نسخه قبلی پیادهسازی شده شما
- بررسی کنید که آیا تغییر میزبان مجازی عمداً یا سهواً در نسخه فعلی اعمال شده است و اقدامات مناسب را همانطور که در بخش راهحل توضیح داده شده است، انجام دهید.
وضوح تصویر
اگر متوجه شدید که میزبان یا میزبانهای مجازی در نسخه جدید حذف شدهاند، ممکن است عمدی یا تصادفی بوده باشد. برای هر مورد، مراحل حل/توصیه شده زیر را برای حل مشکل انجام دهید.
سناریوی شماره ۱: تغییر عمدی
در صورتی که حذف میزبان مجازی عمدی باشد، میتوانید یکی از گزینههای زیر را انتخاب کنید که گزینه اول رویکرد پیشنهادی است:
- یک پروکسی جدید با مسیر پایه متفاوت ایجاد کنید و از یک میزبان مجازی متفاوت استفاده کنید (که در نسخه قبلی پیادهسازی شده وجود ندارد).
اگر میخواهید به استفاده از پروکسی API موجود ادامه دهید اما از یک میزبان مجازی متفاوت استفاده کنید، بهتر است میزبان مجازی موجود را حفظ کرده و میزبان مجازی اضافی را اضافه کنید.
این تضمین میکند که کاربران این پروکسی API تحت تأثیر این تغییر قرار نگیرند.
اگر میخواهید از پروکسی API موجود استفاده کنید و فقط یک میزبان مجازی متفاوت داشته باشید، از قبل به کاربران خود اطلاع دهید و این تغییر را در طول یک دوره نگهداری انجام دهید.
این کار تضمین میکند که کاربران این پروکسی API از تغییر آگاه هستند و میتوانند از یک میزبان مجازی متفاوت برای برقراری تماسها به این پروکسی API استفاده کنند. از این رو، آنها تحت تأثیر این تغییر قرار نخواهند گرفت.
سناریوی شماره ۲: تغییر غیرعمدی
در صورتی که حذف میزبان مجازی به اشتباه و نه عمدی انجام شده باشد، موارد زیر را انجام دهید:
- پیکربندی
ProxyEndpointرا در نسخه فعلی بهروزرسانی کنید تا از همان میزبانهای مجازی که در نسخه قبلی استفاده شده بودند، استفاده شود. در مثال بالا، بخش زیر را از [متن زیر] تغییر دهید:<HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection>به
<HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>vh1</VirtualHost> </HTTPProxyConnection> - نسخه اصلاحشده را مجدداً مستقر کنید.
بهترین شیوهها
همیشه توصیه میشود پروکسیهای جدید یا نسخههای جدید را در طول دوره نگهداری یا زمانی که انتظار میرود ترافیک حداقل باشد، مستقر کنید تا از هرگونه مشکلی که در طول استقرار ایجاد میشود، جلوگیری شود یا تأثیر آن بر ترافیک به حداقل برسد.
علت: مسیر با هیچ پروکسی API مرتبط نیست
اگر پروکسی API برای پذیرش درخواستها برای مسیر خاص استفاده شده در URL درخواست API پیکربندی نشده باشد، ممکن است با پیام خطای 404 Not Found با پیام خطای Unable to identify proxy for host: VIRTUAL_HOST and url: PATH .
تشخیص
- به پیکربندی
ProxyEndpointمربوط به پروکسی API خاصی که قصد ارسال درخواستهای API برای آن را دارید، نگاهی بیندازید. - بررسی کنید که آیا پروکسی API برای پذیرش درخواستها برای مسیر خاص مشخص شده در پیام خطا پیکربندی شده است یا خیر. میتوانید این کار را با انجام مراحل موجود در سناریوی شماره ۱ و سناریوی شماره ۲ انجام دهید.
سناریوی شماره ۱: مسیر با مسیر پایه پروکسی API مطابقت ندارد
- اگر
pathنشان داده شده در پیام خطا باbasepathپروکسی API خاص یکسان نباشد یا باbasepathشروع نشود، میتواند دلیل خطا باشد. - برای توضیح این موضوع، مثالی میزنیم:
-
basepathپروکسی API مورد نظر/weatherاست. - آدرس اینترنتی درخواست API،
https://myorg-prod.apigee.net/climateاست. این بدان معناست که مسیر استفاده شده در آدرس اینترنتی درخواست API،/climate. - در این مثال،
pathباbasepathیکسان نیست و باbasepathشروع نمیشود. از این رو خطای زیر را دریافت میکنید:{ "fault":{ "faultstring":"Unable to identify proxy for host: secure and url: \/climate", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
وضوح تصویر
- مطمئن شوید که
pathاستفاده شده در URL درخواست API شما باbasepathپروکسی API خاص یکسان باشد. - در مثال بالا، آدرس درخواست API باید به صورت زیر باشد:
{ https://myorg-prod.apigee.net/weather
سناریوی شماره ۲: مسیر با هیچ یک از جریانهای شرطی موجود مطابقت ندارد
- اگر
pathاستفاده شده در URL درخواست API باbasepathشروع شود، ممکن استpath suffix(بخشی که بعد ازbasepathمیآید) که در پیام خطا نشان داده شده است با هیچ یک از جریانهای شرطی مطابقت نداشته باشد، در این صورت میتواند باعث خطای404شود. - برای توضیح این موضوع، مثالی میزنیم:
-
basepathپروکسی API مورد نظر/weatherاست. - آدرس اینترنتی درخواست API،
https://myorg-prod.apigee.net/weather/Delhiاست. این بدان معناست که مسیر استفاده شده در آدرس اینترنتی درخواست API/weather/Delhi.
-
- در این مثال،
pathباbasepath/weatherشروع میشود. علاوه بر این،path suffix/Delhiرا نیز دارد. - حالا بررسی کنید که آیا جریانهای شرطی در
ProxyEndpointوجود دارد یا خیر. - اگر هیچ جریان شرطی وجود ندارد یا چند جریان غیر شرطی وجود دارد، به علت بعدی بروید - پروکسی API در یک محیط مستقر نشده است .
- اگر
ProxyEndpointفقط جریانهای شرطی دارد، موارد زیر را بررسی کنید:- اگر شرایط در تمام این جریانهای شرطی، یک
proxy.pathsuffixخاص (مسیر بعد از basepath) را بررسی کنند. - و اگر
path suffixمشخص شده در URL درخواست API با هیچ یک از شرایط مطابقت نداشته باشد، دلیل خطا همین است.
- اگر شرایط در تمام این جریانهای شرطی، یک
- فرض کنید دو جریان در
ProxyEndpointداریم و هر دو جریانهای شرطی هستند، همانطور که در زیر نشان داده شده است:<Condition>(proxy.pathsuffix MatchesPath "/Bangalore") and (request.verb = "GET")</Condition> <Condition>(proxy.pathsuffix MatchesPath "/Chennai") and (request.verb = "GET")</Condition>
- در مثال بالا، دو جریان شرطی داریم، یکی که با
proxy.pathsuffix(مسیر بعد از basepath) به/Bangaloreمطابقت دارد و دیگری با/Chennaiمطابقت دارد. اما هیچ کدام با/Delhiکهpath suffixارسال شده در URL درخواست API است، مطابقت ندارند. - این دلیل خطای
404است. از این رو خطای زیر را دریافت خواهید کرد:{ "fault":{ "faultstring":"Unable to identify proxy for host: secure and url: \/weather\/Delhi", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
- در مثال بالا، دو جریان شرطی داریم، یکی که با
وضوح تصویر
- مطمئن شوید که
path suffixحداقل با یکی از جریانهای شرطی در نقطه پایانی پروکسی شما مطابقت دارد. - در مثال بالا، میتوانید از روشهای زیر برای رفع خطا استفاده کنید:
- اگر میخواهید مجموعه خاصی از سیاستها را برای مسیر
/Delhiاجرا کنید، یک جریان جداگانه با مجموعه سیاستهای مورد نیاز اضافه کنید و مطمئن شوید که شرطی وجود دارد که با/proxy.pathsuffix/Delhiمطابق شکل زیر مطابقت دارد:<Condition>(proxy.pathsuffix MatchesPath "/Delhi") and (request.verb = "GET")</Condition>
- اگر میخواهید مجموعهای از سیاستهای مشترک را برای مسیر
/Delhiاجرا کنید، در جریان مشترک، مطمئن شوید که شرطی وجود دارد که به/proxy.pathsuffixعمومی اجازه میدهد. یعنی، هر مسیری را پس ازbasepath/weatherهمانطور که در زیر نشان داده شده است، مجاز میداند:<Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>
- اگر میخواهید مجموعه خاصی از سیاستها را برای مسیر
اگر ProxyEndpoint basepath صحیحی داشته باشد و path suffix مشخص شده در API URL با یکی از جریانهای شرطی مطابقت داشته باشد، به علت بعدی بروید - پروکسی API در یک محیط مستقر نشده است .
علت: پروکسی API در یک محیط مستقر نشده است
تشخیص
- محیطی را که نام مستعار میزبان استفاده شده در URL درخواست API شما در آن وجود دارد، تعیین کنید. این کار را میتوان با بررسی جزئیات تمام میزبانهای مجازی در هر یک از محیطهای سازمان شما در رابط کاربری Edge انجام داد.
برای مثال، پیکربندی زیر را فرض کنید:
- اگر
http://myorg-prod.apigee.net/weatherآدرس اینترنتی شما باشد،myorg-prod.apigee.netنام مستعار میزبان است. - میزبان با نام مستعار
myorg-prod.apigee.netبه عنوان بخشی از یکی از میزبانهای مجازی در محیطprodسازمان شما پیکربندی شده است.
- اگر
- بررسی کنید که آیا پروکسی API خاص در محیط خاص تعیین شده در مرحله 1 بالا مستقر شده است یا خیر.
- اگر پروکسی API در محیط خاص مستقر نشده باشد، دلیل خطای
404همین است.- بنابراین در مثالی که در مرحله ۱ بالا استفاده شد، فرض کنید پروکسی API در محیط
prodمستقر نشده باشد، پس این دلیل خطا است. - به بخش وضوح تصویر در زیر بروید.
- بنابراین در مثالی که در مرحله ۱ بالا استفاده شد، فرض کنید پروکسی API در محیط
- اگر پروکسی API در محیط خاص مستقر شده است، به دلیل بعدی بروید - محیط روی پردازندههای پیام بارگذاری نشده است .
وضوح تصویر
پروکسی API را در محیط خاصی که قصد ارسال درخواستهای API را دارید، مستقر کنید.
علت: محیط روی پردازندههای پیام بارگذاری نشده است
تشخیص
- به هر یک از پردازندههای پیام (Message Processors) وارد شوید و با استفاده از دستور زیر بررسی کنید که آیا محیط خاصی که در آن درخواست API را ارسال میکنید، در پردازنده پیام بارگذاری شده است یا خیر:
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments
- اگر محیط خاص به عنوان بخشی از دستور بالا ذکر شده است، به دلیل بعدی بروید - پروکسی API روی یک یا چند پردازنده پیام مستقر نشده است .
- اگر محیط خاص ذکر نشده است، برای یافتن هرگونه خطا در هنگام بارگذاری محیطها،
/opt/apigee/var/log/edge-message-processor/logs/system.logو/opt/apigee/var/log/edge-message-processor/logs/startupruntimeerrors.logرا در Message Processors بررسی کنید. - ممکن است خطاهای مختلف زیادی وجود داشته باشد که منجر به عدم بارگذاری یک محیط در پردازنده پیام شود. راهحل بستگی به خطایی دارد که رخ داده است.
وضوح تصویر
ممکن است محیط به دلایل زیادی روی پردازشگر پیام بارگذاری نشود. این بخش چند دلیل احتمالی را که میتواند منجر به این مشکل شود، نشان میدهد و نحوه حل مشکل را توضیح میدهد.
اگر یکی از خطاهای زیر را در گزارش پردازشگر پیام مشاهده کردید، این خطا ناشی از مشکلی در گواهیها/کلیدها است که به keystore/truststore مشخص شده در محیط مشخص شده اضافه شدهاند.
خطای شماره ۱: java.security.KeyStoreException: نمیتوان گواهی خود را بازنویسی کرد
2018-01-30 12:04:38,248 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mycert in key store : mytruststore in environment : test at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.AbstractConfigurator.propagateEvent(AbstractConfigurator.java:85) ~[config-entities-1.0.0.jar:na] at com.apigee.messaging.runtime.Environment.handleUpdate(Environment.java:238) [message-processor-1.0.0.jar:na] … Caused by: java.security.KeyStoreException: Cannot overwrite own certificate at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:355) ~[sunjce_provider.jar:1.8.0_151] at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_151] at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na]
... 20 common frames omitted2018-01-30 12:04:38,250 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert
خطای شماره ۲: java.security.KeyStoreException: نمیتوان کلید مخفی را بازنویسی کرد
2017-11-01 03:28:47,560 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mstore in key store : myTruststore in environment : dev at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na] ... Caused by: java.security.KeyStoreException: Cannot overwrite secret key at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:354) ~[sunjce_provider.jar:1.8.0_144] at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_144] at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na] ... 20 common frames omitted 2017-11-01 03:28:47,562 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert
- با استفاده از فراخوانی API مدیریتی زیر، جزئیات keystore/truststore مشخص شده در پیام خطای نشان داده شده در مرحله قبل را دریافت کنید:
curl -v "http://<management-IPaddress>:8080/v1/organizations/<org-name>/environments/<env-name>/keystores/myTruststore" -u <user>
خروجی مثال:
{ "certs":[ "mycert", "mycert-new" ], "keys":[ "mycert" ], "name":"myTruststore" } - خروجی مثال نشان میدهد که دو گواهی و یک کلید در فروشگاه اعتماد
myTruststoreوجود دارد. فروشگاه اعتماد معمولاً حاوی کلید نیست. اگر هم باشد، بهتر است یک گواهی و یک کلید داشته باشید. - با استفاده از API زیر، جزئیات مربوط به دو گواهی را دریافت کنید:
curl -s http://<management-IPaddress>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/keystores/<keystore-name>/certs/<cert-name>
- تاریخ انقضای هر یک از گواهینامهها را بررسی کنید و گواهینامه منقضی شده/قدیمیتر را تعیین کنید.
- گواهی منقضی شده یا ناخواسته را از فروشگاه اعتماد
myTruststoreحذف کنید.
اگر مشکل همچنان ادامه داشت یا خطایی غیر از موارد ذکر شده در مرحله 1 بالا مشاهده کردید، به بخش «باید اطلاعات تشخیصی را جمعآوری کنید» بروید.
علت: پروکسی API روی یک یا چند پردازنده پیام مستقر نشده است
ممکن است پروکسی API روی یک یا چند پردازنده پیام (Message Processors) مستقر نشده باشد. این مشکل بسیار نادر است و بیشتر به دلیل عدم ارسال اعلان رویداد از سرور مدیریت به پردازنده پیام (Message Processor) در حین استقرار پروکسی API خاص رخ میدهد. در این حالت نیز، شما قادر به ایجاد جلسه ردیابی در رابط کاربری Edge نخواهید بود.
تشخیص
- به هر یک از پردازندههای پیام وارد شوید و با استفاده از دستور زیر بررسی کنید که آیا نسخه خاص پروکسی API مستقر شده است یا خیر:
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions
- اگر نسخه خاص پروکسی API به عنوان خروجی دستور ذکر شده در مرحله 1 بالا نمایش داده نشد، پردازنده پیام خاص را همانطور که در Resolution توضیح داده شده است، مجدداً راهاندازی کنید.
- مراحل ۱-۲ را برای همه پردازندههای پیام تکرار کنید.
- اگر نسخه خاص پروکسی API روی همه پردازندههای پیام مستقر شده باشد، این دلیل این مشکل نیست. به «باید اطلاعات تشخیصی جمعآوری شود» بروید.
وضوح تصویر
پردازشگرهای پیام خاصی را که نسخه خاص پروکسی API روی آنها مستقر نشده است، مجدداً راهاندازی کنید.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
تشخیص مشکلات با استفاده از مانیتورینگ API
مانیتورینگ API به شما این امکان را میدهد که به سرعت حوزههای مشکلدار را جدا کنید تا مشکلات خطا، عملکرد و تأخیر و منبع آنها، مانند برنامههای توسعهدهنده، پروکسیهای API، اهداف backend یا پلتفرم API را تشخیص دهید.
برای این مشکل، میتوانید به صفحه API Monitoring > Investigate بروید و تاریخ، پروکسی و غیره مناسب را انتخاب کنید، و ممکن است جزئیات زیر را مشاهده کنید:

- کد خطا:
messaging.adaptors.http.flow.ApplicationNotFound - کد وضعیت:
404 - منبع خطا:
ApigeeیاMP
علاوه بر این، میتوانید همانطور که در تصویر بالا نشان داده شده است، روی مشاهده گزارشها کلیک کنید و اطلاعات بیشتری را بررسی کنید.

یک سناریوی نمونه را به صورت مرحلهای بررسی کنید تا نحوه عیبیابی مشکلات 5xx با APIهای خود را با استفاده از مانیتورینگ API نشان دهید. به عنوان مثال، ممکن است بخواهید هشداری تنظیم کنید تا وقتی تعداد کدهای وضعیت 404 از یک آستانه خاص فراتر رفت، به شما اطلاع داده شود.
باید اطلاعات تشخیصی جمعآوری کند
اگر مشکل حتی پس از دنبال کردن دستورالعملهای بالا ادامه داشت، اطلاعات تشخیصی زیر را جمعآوری کنید. با پشتیبانی Apigee Edge تماس بگیرید و این اطلاعات را با آنها به اشتراک بگذارید.
- اگر کاربر فضای ابری عمومی هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط
- نام پروکسی API
- دستور curl را برای بازتولید خطا کامل کنید
- اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل مشاهده شد
- نام محیط
- بسته پروکسی API
- گزارشهای پردازشگر پیام
/opt/apigee/var/log/edge-message-processor/logs/system.log - خروجی دستورات زیر در هر یک از پردازندههای پیام.
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions - جزئیات مربوط به بخشهایی از این راهنما که شما امتحان کردهاید و هرگونه اطلاعات دیگری که به ما در تسریع حل این مشکل کمک کند.