Первые несколько статей в основном сосредоточены на использовании Eureka в регистрационном центре. Далее вы можете создать поставщика услуг для регистрации в Eureka.
См. Демо-исходный код: https://github.com/ryan-miao/spring-cloud-edgware-demo/tree/master/provider-demo
Чтобы облегчить контроль версий, следующие проекты настроены на основе родительской конфигурации https://github.com/ryan-miao/spring-cloud-edgware-demo.
Создайте поставщик смены ребенка-поставщика
Создайте дочерний модуль с поставщиком имени проекта-Demo. Заполните зависимости Springboot и Springcloud
<dependencies> <!--springboot dependency start--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </depervice> <dependency> <groupid> org.springframework.boot </GroupId> <StrifactId> Spring-boot-devtools </artifactid> <plociate> true </optunate> </depertive> <dependency> <groupid> com.fasterxml.jackson.datatype </groupid> <ArtifactId> Джексон-Дататип-jsr310 </artifactId> </depervice> <depertion> <groupid> org.springframework.cloud </groupid> <artifactid> Spring-croud-starter-eureka </artifactid> </jepertive> <!-Springboot-> <Зависимость> <Group> io. <strifactid> springfox-swagger2 </artifactid> </jeploydent> <dependency> <groupid> io.springfox </GroupId> <strifactid> springfox-swager-ui </artifactid> </degybact> <!-Класс инструментов-> <DeyEndency> <group> com.gavavaVAVAVAVAVAVE> <! </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> </dependency> <!--Tool class end--> </зависимости>
spring-boot-starter-web предоставляет веб-возможности, spring-boot-starter-actuator предоставляет статистику проекта и основную конечную точку мониторинга. Если вы хотите использовать мониторинг пружинного адапта, вы должны добавить режим разработки spring-boot-devtools jackson-datatype-jsr310 который может решить новое время дезинтеграции Java8 Apilocaldate Disintegration spring-cloud-starter-eureka Eureka lombok ответственного за поддержание сердца и регистрация swagger Он выглядит освежающим инструментом поставщика на уровне компиляции. Большая и полная Java Essential Class logstash-logback-encoder guava
Класс запуска
@EnabledIscoveryClient@SpringBootApplicationPublic Class ProviderDemoApplication {public static void main (string [] args) {SpressApplication.run (ProviderDemoApplication.class, args); }} @EnableDiscoveryClient для включения регистрации обслуживания
Этот провайдер -инмоаппликация должен быть размещен на самом внешнем уровне пакета проекта, потому что @springbootappliatin содержит аннотацию @componentscan, а сканирование по умолчанию сканируется в соответствии с этим классовым пакетом, в противном случае сканирование должно быть указано вручную.
Чванство
Swagger - это класс конфигурации
@Enableswger2@configurationpublic class swaggerconfiguration {private apiinfo apiinfo () {return new apiinfobuilder () .title («API поставщика услуг») .description («Предоставьте пользовательский запрос»). } /*** Определите конфигурацию API. */ @Bean public docket api () {return new docket (documentType.swagger_2). Select () .apis (requestHandlerselectors.withclassannotation (api.class)) .build () .apiinfo (apiinfo ()); }}Для маршрутизации страницы Swagger нам нужно направлять следующее:
Создайте контроллер для навигации
@Controllerpublic class homecontroller {@getmapping (value = {"/api", "/"}) public String api () {return "redirect:/swagger-ui.html"; }}Давайте возьмем интерфейс контроллера
@Api@restcontroller@requestmapping ("/api/v1/users") public class usercontroller {private list <user> users = lists.newarraylist (новый пользователь (1, "tan haoqiang", 100, localdate.now (), новый пользователь (2, "Ян Вейимн", 120, локальный Localdate.now ()), новый пользователь (4, «Джеймс Гослинг», 150, localdate.now ()), новый пользователь (6, «Дуг Ли», 150, localdate.now ())); @Getmapping ("/") public list <uservo> list () {return users.stream () .map (u -> new uservo (u.getid (), u.getname (), u.getage (), u.getbirth ()) .collect (collectors.tolist ()); }}Некоторые простые конфигурации среды
Application.yml
Весна: Приложение: Имя: Провайдер-Демо Джексон: Serialization: write_dates_as_timestamps: False Default Property-Inclusion: NON_NULL#Конфигурация времени истечения срока действия сервера. Если сердцебиение не получено после этого времени, Eurekaserver удалит этот экземпляр. Обратите внимание, что Eurekaserver должен установить eureka.server.eviction-interval-timer-in-ms, в противном случае эта конфигурация недействительна. Эта конфигурация, как правило, в три раза превышает конфигурацию времени обновления службы. #Default 90seureka.instance.lease-expiration-duration-in-seconds: 15 #Служба обновляет конфигурацию времени, а сердцебиение будет активным каждый раз в это время #Default 30seureka.instance.Lease-interval-in-in-seconds: 5Server: Port: 8082springfox: Document: Swager: vgeger: vager: vager: vagert: vagert: vageratation: vageratation: v7. /swagger-resources /api-doclog: path: журналы
Application-dev.yml
Управление: безопасность: включено: Falseseeureka: Client: ServiceUrl: Defaultzone: http: // localhost: 8761/eureka/logstash: url: localhost: 4560
Мне нужно упомянуть это здесь, что, поскольку я интегрирую Logstash, я должен установить Logstash, см. Elk для введения. Конечно, вы можете пропустить его, если вы не предоставите конфигурацию recoreback.xml, вы можете удалить Logstash в зависимости.
Конфигурация журнала
По умолчанию используется резерв в качестве фреймворта журнала. Простая конфигурация заключается в следующем. Для тех, кто не хочет использовать Logstash, просто удалите приложение Logstash.
Создайте новый restrack-spring.xml в рамках ресурса
<? xml version = "1.0" Encoding = "UTF-8"?> <configuration scan = "true" scanperiod = "60 секунд" debug = "false"> <springproperty scope = "context" name = "appname" source = "spring.application.name" defaultValue = "Неизвестный"/> <springproperty sacop rabop rabopte "name name name" = "name vecpalte". defaultValue = "logs"/> <springproperty scope = "context" name = "logstashurl" source = "logstash.url" defaultValue = "localhost: 4560"/> <includ resource = "org/springframework/boot/logback/base.xml"/> <!-Выходные на консультант name name = "insole raming name yele 'insole raming naming naming naming namering yemplering raming name yearmer yemperer =" <concoder> <tlement> %d {hh: mm: ss.sss} %x {req.remotehost} %x {req.requesturi} $ {appname} [ %поток] %-5level %logger {36}- %msg %n </pattern> </encoder> </appender> <! <lllingpolicy> <filenamepattern> $ {log.path}/$ {appname}.%d {yyyy-mm-dd} .log </filenamepattern> </rollingpolicy> <concoder> <Temter>%d {HH: MM: Ssss} $ {appnAM %X {req.requesturi} %x {req.useragent} %x {req.method}-[ %поток] %-5level %logger {36}- %msg %n </pattern> </encoder> </appender> <!-Выход To logstash-> <adpender name = "> <назначение> $ {$ $ {outence> <recount> $ {$ $ {! <encoder charset="UTF-8"/> </appender> <springProfile name="dev"> <root level="info"> <appender-ref ref="console"/> <appender-ref ref="file"/> <appender-ref ref="file"/> <appender-ref ref="file"/> <appender-ref ref="LOGSTASH"/> </root> </springProfile> <springprofile name = "test, prod"> <root level = "info"> <appender-ref ref = "file"/> <appender-ref ref = "logstash"/> </root> </springprofile> </configuration>запускать
Убедитесь, что Eureka была запущена, администратор лучше всего запустить, чтобы облегчить просмотр статуса приложения, а также лучше всего доступна система регистрации Elk. Конечно, только Эврика - необходимость.
Компиляция и упаковка
MVN Clean Install Package Spring-Boot: переупаковка
Запустите основной метод, укажите профиль как DEV, вы можете редактировать конфигурацию выполнения в Idea и добавить параметры
-spring.profiles.active = dev
Или запустить банку командной строки
Скопируйте код следующим образом: java -xms256m -xmx1g -xx:+useg1gc -jar ./target/provider-demo-0.0.1-snapshot.jar ---spring.profiles.active = dev
После запуска, доступ к Eureka
Посетить администратор
Посетите провайдер-Демо
Разоблачить наш API потребителю
Поскольку есть поставщики услуг, это должно быть для потребления потребителей. Как потреблять потребителей? Просто позвоните в этот HTTP -запрос вручную. Упомянутый ранее контракт Swagger Restful - это параметры и требования, предоставляемые поставщиком услуг для запроса доступа. Если потребитель разрабатывает этого клиента вручную, он будет трудоемким и подверженным ошибкам. Поэтому, как поставщик услуг, вы должны предоставить SDK или клиента потребителю для использования.
В системе технологий Spring Cloud удаленные вызовы, естественно, являются главным приоритетом. Конкретное использование, которое я обнаружил, это Feign+лента+Hystrix.
Благодаря док -демократическому интерфейсу Фейна внедряются потребительские призывы к поставщику. Ленточная балансировка нагрузки клиента, Hystrix - это здоровый выключатель цепи.
Здесь нам сначала нужно предоставить интерфейс Фейна.
Уточнить API контроллера в интерфейс. Сначала мы создаем новый проект
https://github.com/ryan-miao/spring-cloud-edgware-demo/tree/master/provider-api
Поместите этот проект в список зависимостей поставщика-демо
<!-Внутренняя зависимость-> <Dependency> <groupId> com.test </GroupId> <ArtifactId> Provider-API </artifactid> <serse> 0.0.1-snapShot </version> </reseent> <!-Внутренняя зависимость-конец зависимости->
Выйдите из интерфейсного канала пользователя в проекте провайдера-API
@Requestmapping ("/api/v1/users") public interface userApi {@getMaping ("/") list <uservo> list ();}Контроллер поставщика-демо изменяется следующим образом
@Api@restcontrollerpublic class usercontroller реализует userapi {private list <user> users = lists.newarraylist (новый пользователь (1, "tan haoqiang", 100, localdate.now ()), новый пользователь (2, "Ян Веймин", 120, Localdate.now (), новый пользователь (3, "tan haoqian Localdate.now ()), новый пользователь (4, «Джеймс Гослинг», 150, localdate.now ()), новый пользователь (6, «Дуг Ли», 150, localdate.now ())); @Override public list <uservo> list () {return users.stream () .map (u -> new uservo (u.getid (), u.getName (), u.getage (), u.getbirth ()) .collect (collectors.tolist ()); }}Таким образом, контроллер не изменился, но был вытащен с пути API. Независимый поставщик модулей-API-это клиент, который мы предоставляем потребителю. В следующем разделе используется потребитель для потребления.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.