บทความสองสามข้อแรกมุ่งเน้นไปที่การใช้ยูเรก้าในศูนย์การลงทะเบียน ถัดไปคุณสามารถสร้างผู้ให้บริการเพื่อลงทะเบียนกับ Eureka
ดูซอร์สโค้ดตัวอย่าง: https://github.com/ryan-miao/spring-cloud-edgware-demo/tree/master/provider-demo
เพื่ออำนวยความสะดวกในการควบคุมเวอร์ชันโครงการถัดไปจะได้รับการกำหนดค่าทั้งหมดตาม parent https://github.com/ryan-miao/spring-cloud-edgware-demo
สร้างผู้ให้บริการ Moudle Demo
สร้างโมดูลเด็กด้วยผู้ให้บริการชื่อโครงการ-เดโม เติมพึ่งพา Springboot และ SpringCloud
<การพึ่งพา> <!-เริ่มต้นการพึ่งพา SpringBoot-> <การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </artifactid> </การพึ่งพา> <ArtIfactId> Spring-Boot-Starter-ACTUATOR </artifactId> </การพึ่งพาอาศัย> <การพึ่งพา> <roupId> org.springframework.boot </groupId> <RoupID> com.fasterxml.jackson.datatype </groupId> <ratifactid> Jackson-Datatype-JSR310 </artifactid> </การพึ่งพาอาศัย> <การพึ่งพา> <roupid> org.springframework.cloud </groupid> สิ้นสุดการพึ่งพา-> <cendency> <roupId> io.springfox </groupId> <ratifactid> SpringFox-Swagger2 </artifactId> </serpendency> <การพึ่งพาอาศัย> <roupId> io.springfox </groupid> <RoupID> com.google.guava </groupId> <ratifactid> Guava </artifactid> </การพึ่งพา> <การพึ่งพาอาศัย> <roupId> org.projectlombok </groupid> <ratifactid> lombok </artifactid> <ArtIfactId> LogStash-Logback-encoder </artifactId> </dependency> <!-การสิ้นสุดคลาสเครื่องมือ-> </การพึ่งพา> <การพึ่งพา>
spring-boot-starter-web ให้ความสามารถทางเว็บ, spring-boot-starter-actuator ให้สถิติโครงการและจุดสิ้นสุดการตรวจสอบขั้นพื้นฐาน หากคุณต้องการใช้การตรวจสอบการพัฒนาฤดูใบไม้ผลิคุณต้องเพิ่มโหมดการพัฒนา spring-boot-devtools โหมดแจ็คสัน lombok jackson-datatype-jsr310 สามารถแก้ปัญหาเวลาใหม่ของ java8 apilocaldate สลาย swagger spring-cloud-starter-eureka Eureka ดูเหมือนเครื่องมือ Setter ระดับการรวบรวมที่สดชื่น guava ขนาดใหญ่และสมบูรณ์ของ Java Essential Class Library Library logstash-logback-encoder ต้องการรวบรวมบันทึกไปยัง Elk ใช้ Appender นี้
คลาสเริ่มต้น
@enableiscoveryclient@springbootapplicationpublic คลาส providerDemoApplication {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (providerDemoApplication.class, args); - @EnableDiscoveryClient เพื่อเปิดใช้งานการลงทะเบียนบริการ
ผู้ให้บริการนี้ควรวางไว้ที่ชั้นนอกสุดของแพ็คเกจโครงการเนื่องจาก @springbootappliatin มีคำอธิบายประกอบของ @componentscan และการสแกนเริ่มต้นจะถูกสแกนภายใต้แพ็คเกจคลาสนี้มิฉะนั้นจะต้องระบุการสแกนด้วยตนเอง
พูดพอดี
Swagger เป็นคลาสการกำหนดค่า
@ENABLEWAGRGER2@configurationPublic คลาส swaggerConfiguration {ส่วนตัว apiinfo apiinfo () {ส่งคืน apiinfobuilder ใหม่ () .title ("ผู้ให้บริการ API") .Description ("ให้ข้อมูลผู้ใช้"). } /*** กำหนดค่า API */ @Bean Public Docket API () {ส่งคืนใบปะหน้าใหม่ (DocumentationType.swagger_2) .Select () .APIS (requestHandLerselectors.WithClassAnnotation (api.class)) .build () .apiinfo (apiinfo (); -สำหรับการกำหนดเส้นทางของหน้า Swagger เราจำเป็นต้องให้คำแนะนำต่อไปนี้:
สร้างคอนโทรลเลอร์เพื่อนำทาง
@ControllerPublic คลาส homecontroller {@getMapping (value = {"/api", "/"}) สตริงสาธารณะ api () {return "redirect: /swagger-ui.html"; -ลองใช้อินเทอร์เฟซคอนโทรลเลอร์
@api@restcontroller@requestmapping ("/api/v1/ผู้ใช้") คลาสสาธารณะ userController {รายการส่วนตัว <ผู้ใช้> ผู้ใช้ = lists.newarraylist (ผู้ใช้ใหม่ (1, "Tan Haoqiang", 100, localdate.now (), ผู้ใช้ใหม่ 100, localdate.now ()), ผู้ใช้ใหม่ (4, "James Gosling", 150, localdate.now ()), ผู้ใช้ใหม่ (6, "Doug Lea", 150, localdate.now ()); @getMapping ("/") รายการสาธารณะ <Eservo> list () {return users.stream () .map (u -> uservo ใหม่ (u.getId (), u.getName (), u.getage (), u.getBirth ())) .collect (collectors.tolist); -การกำหนดค่าสภาพแวดล้อมที่เรียบง่ายบางอย่าง
application.yml
ฤดูใบไม้ผลิ: แอปพลิเคชัน: ชื่อ: ผู้ให้บริการ-เดโมแจ็คสัน: การทำให้เป็นอนุกรม: WRITE_DATES_AS_TIMESTAMPS: FALSE-FALTE-PROPERTY-Inclusion: NON_NULL#การกำหนดค่าเวลาหมดอายุเซิร์ฟเวอร์ หากไม่ได้รับการเต้นของหัวใจหลังจากเวลานี้ Eurekaserver จะลบอินสแตนซ์นี้ โปรดทราบว่า Eurekaserver จะต้องตั้งค่า Eureka.server.eviction-Interval-Timer-in-MS มิฉะนั้นการกำหนดค่านี้ไม่ถูกต้อง การกำหนดค่านี้โดยทั่วไปสามเท่าของการกำหนดค่าเวลารีเฟรชบริการ #Default 90Seureka.instance.lease--expiration-in-seconds: 15 #บริการรีเฟรชการกำหนดค่าเวลาและการเต้นของหัวใจจะทำงานทุกครั้งที่ #default 30seureka.instance.lease-renewal-interval-seconds: 5Server /swagger-sources /api-docslog: path: logs
Application-dev.yml
การจัดการ: ความปลอดภัย: เปิดใช้งาน: Falseseeureka: ไคลเอนต์: ServiceUrl: defaultzone: http: // localhost: 8761/eureka/logstash: url: localhost: 4560
ฉันต้องพูดถึงที่นี่ว่าตั้งแต่ฉันรวม logstash ฉันต้องติดตั้ง logstash ดู Elk สำหรับการแนะนำ แน่นอนว่าคุณสามารถข้ามไปได้ตราบใดที่คุณไม่ได้ให้การกำหนดค่า logback.xml คุณสามารถลบ logstash ในการพึ่งพา
การกำหนดค่าบันทึก
Logback ใช้เป็น Framework บันทึกโดยค่าเริ่มต้น การกำหนดค่าอย่างง่ายมีดังนี้ สำหรับผู้ที่ไม่ต้องการใช้ LogStash เพียงแค่ลบ LogStash Appender
สร้าง logback-spring.xml ใหม่ภายใต้ทรัพยากร
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <การกำหนดค่า scan = "true" scanperiod = "60 วินาที" debug = "false"> <pringproperty scope = "context" name = "appname" source = "spring.application.name defaultValue = "logs"/> <pringproperty scope = "context" name = "logstashurl" source = "logstash.url" defaultValue = "localhost: 4560"/> <รวมทรัพยากร = "org/spramframework/boot/loging <Soncoder> <matter> %d {hh: mm: ss.sss} %x {req.remotehost} %x {req.requesturi} $ {appname} [ %เธรด] %-5Level %logger {36}- %msg %n </pattern> <rollingPolicy> <pilenamePattern> $ {log.path}/$ {appname}.%d {yyyy-mm-dd} .log </filenamepattern> </rollingPolicy> <coder> %x {req.requesturi} %x {req.useragent} %x {req.method}-[ %เธรด] %-5level %logger {36}- %msg %n </pattern> </coder> <encoder charset = "utf-8"/> </appender> <pringprofile name = "dev"> <root level = "info"> <appender-ref ref = "console"/> <appender-ref ref = "ไฟล์"/> <appender-ref ref = "ไฟล์"/> <pringprofile name = "test, prod"> <root level = "info"> <appender-ref ref = "ไฟล์"/> <Appender-ref ref = "logStash"/> </root>เริ่มต้น
ตรวจสอบให้แน่ใจว่ายูเรก้าเริ่มต้นขึ้นผู้ดูแลระบบดีที่สุดที่จะเริ่มต้นเพื่ออำนวยความสะดวกในการดูสถานะแอพและระบบการบันทึกของ Elk ก็มีให้ดีที่สุด แน่นอนว่ามีเพียงยูเรก้าเท่านั้นที่จำเป็น
รวบรวมและแพ็คเกจ
MVN Clean Install Package Spring-Boot: Repackage
เรียกใช้วิธีหลักระบุโปรไฟล์เป็น dev คุณสามารถแก้ไขการกำหนดค่าการเรียกใช้ในแนวคิดและเพิ่มพารามิเตอร์
--spring.profiles.active = dev
หรือเริ่มต้นคำสั่ง jar
คัดลอกรหัสดังนี้: java -xms256m -xmx1g -xx:+useg1gc -jar ./target/provider-demo-0.0.1-snapshot.jar -spring.profiles.active = dev
หลังจากเริ่มต้นแล้ว Access Eureka
เยี่ยมชมผู้ดูแลระบบ
เยี่ยมชม Provider-Demo
เปิดเผย API ของเราต่อผู้บริโภค
เนื่องจากมีผู้ให้บริการจึงต้องมีไว้สำหรับการบริโภคของผู้บริโภค ผู้บริโภคควรบริโภคอย่างไร? เพียงแค่เรียกร้องขอ HTTP ด้วยตนเอง สัญญา Restful Swagger ที่กล่าวถึงก่อนหน้านี้คือพารามิเตอร์และข้อกำหนดที่ได้รับจากผู้ให้บริการเพื่อขอการเข้าถึง หากผู้บริโภคพัฒนาลูกค้ารายนี้ด้วยตนเองมันจะใช้เวลานานและผิดพลาดได้ง่าย ดังนั้นในฐานะผู้ให้บริการคุณควรให้ SDK หรือลูกค้าแก่ผู้บริโภคเพื่อใช้งาน
ในระบบเทคโนโลยีคลาวด์สปริงการโทรจากระยะไกลเป็นสิ่งสำคัญที่สุด การใช้งานเฉพาะที่ฉันพบคือ Feign+Ribbon+Hystrix
ผ่านการเชื่อมต่ออินเทอร์เฟซที่ประกาศของ Feign ผู้บริโภคจะเรียกผู้ให้บริการไปยังผู้ให้บริการ Ribbon Client Load Balancing, Hystrix เป็นเบรกเกอร์ที่มีสุขภาพดี
ที่นี่เราต้องจัดให้มีอินเทอร์เฟซของ Feign ก่อน
ปรับแต่ง API ของคอนโทรลเลอร์ลงในอินเทอร์เฟซ อันดับแรกเราสร้างโครงการใหม่
https://github.com/ryan-miao/spring-cloud-edgware-demo/tree/master/provider-api
วางโครงการนี้ไว้ในรายการการพึ่งพาของผู้ให้บริการ-เดโม
<!-การพึ่งพาภายใน-> <การพึ่งพา> <roupId> com.test </groupId> <ratifactId> ผู้ให้บริการ-API </artifactId> <cersion> 0.0.1-Snapshot </เวอร์ชัน> </ercendent> <!
ออกจากช่องอินเตอร์เฟส userapi ในโครงการ Provider-API
@RequestMapping ("/api/v1/ผู้ใช้") อินเตอร์เฟสสาธารณะ userapi {@getMapping ("/") รายการ <Servo> list ();}คอนโทรลเลอร์ของ Provider-Demo ได้รับการแก้ไขดังนี้
@api@restcontrollerpublic คลาส usercontroller ใช้ userapi {รายการส่วนตัว <ผู้ใช้> ผู้ใช้ = lists.newarraylist (ผู้ใช้ใหม่ (1, "Tan Haoqiang", 100, localdate.now ()) ผู้ใช้ใหม่ (2, "Yan Weimin", 120, LocalDate.now () localdate.now ()), ผู้ใช้ใหม่ (4, "James Gosling", 150, localdate.now ()), ผู้ใช้ใหม่ (6, "Doug Lea", 150, localdate.now ())); @Override รายการสาธารณะ <Evervo> list () {return users.stream () .map (u -> uservo ใหม่ (U.getId (), u.getName (), U.Getage (), U.getBirth ())) .Collect (collector.tolist ()) -ด้วยวิธีนี้คอนโทรลเลอร์ไม่เปลี่ยนแปลง แต่ถูกดึงออกจากเส้นทาง API ผู้ให้บริการโมดูลอิสระ-API เป็นลูกค้าที่เรามอบให้แก่ผู้บริโภค ส่วนถัดไปใช้ผู้บริโภคเพื่อบริโภค
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น