【亚洲必赢官网】Cloud达成微服务详细教程第二篇,cloud开辟总括

spring/spring boot/spring cloud开采计算,springcloud

  背景

     
 
本着RPC远程调用,都在动用dubbo、dubbox等,我们也是这般。由于社区暂停维护、应对前程提高,大家打算尝试新本领(或者此刻也不算什么新技巧了呢),选择使用了spring
cloud架构。在这里时期使用spring
boot项目尝试开拓,结果优良。所以想重构原spring项目至spring
cloud一步一步进行,因而开辟中会现身各样难题。

  问题

      难题三番四回伴随着开采一步一步显表露来,遭逢难题总要去化解:

      spring cloud相关难点:

        1.跨系统调用,传参对象吸收不到难点

【亚洲必赢官网】Cloud达成微服务详细教程第二篇,cloud开辟总括。           解决:服务方在对象参数前@RequestBody就能够(ps:public void
saveUser(@RequestBody User user)),数据存在报文娱体育中。

        2.系统间重试难题,会频仍调用是常规专门的学业数据现身重复,产生垃圾数据

           肃清分为2步且独具都在调用方配置,第一步新添类:

           return中是参照feign.Retryer,至于方法名字大肆。

@Configuration
public class FeignConfig {
    @Bean
    public Retryer feignRetryer() {
        return new Retryer.Default(100, SECONDS.toMillis(1), 0);
    }
}

        第二步: 

       # Max number of next servers to retry (excluding the first
server)

*    * 
  sample-client.ribbon.MaxAutoRetriesNextServer=1对此集群服务会自由选取下二个劳务,有非常的大可能率还是选择访谈自个儿。不是集群设置为1会访谈本人会导致2次寻访。

        sample-client 对于多少个服务端,sample-client能够删掉。 

           查看配置开采,针对配置部分请点击这里:

    # Max number of retries on the same server (excluding the first
try)
    sample-client.ribbon.马克斯AutoRetries=1  意识没用     

  
 3.布署服务器,注册中央服务均存在,可是不恐怕访谈获取数据,报服务拒绝连接

         
 解决:其实那算是个注意点,常常付出都以SpringApplication运营项目,打包布署服务时tomcat端口与server.port(spring
boot)配置不平等导致。估摸spring
cloud访谈从登记中央获得主机与端口,依照主机和端口访谈服务可是服务tomcat设置端口与安顿不相符,产生难题。

    spring boot相关难点:

         1.档案的次序选用SpringApplication运维寻常,可是访谈不了页面

           
清除:@ComponentScan只扫描当前先后所在包结构(包罗子包)中注明

      | – src
      | | – main
      | | | – java
      | | | | – com
      | | | | | – controller/service/dao
      | | | | – SpringApplication.java

         2.伸手url响应难题,分裂后缀响应不一样

              撤除:该现象是因为spring
boot有四个视图解析器,ajax央求能够一向选拔a/b,页面a/b.htm

      spring相关难点:

         1.spring调用spring cloud项目难点

             
 解除:使用HttpClient设置央求头Content-Type:application/json访问spring
cloud对外系统(gateway)就能够,至于内网外网采访随便

      分外难题:

         spring
cloud有Hystrix断路由,就算平价多多,但是访问各个接口都要对应断路由接口,若是拍卖逻辑有分别幸好,未有分别笔者就不说了。由于大家是统后生可畏重返,所以本着出现难点选拔全局十三分拦截记录日志重返失利,那有个毛病是拜见通非凡能够拍卖,至于超时那几个从没访谈通将在捕获。

 讨论

   
  
学艺不精,有些皆以半懂不懂,希望大神能辅导指点。当中有个别纠结,spring访问spring
 cloud最终都打成war包陈设发布,个人认为spring应该也能够登记到注册中央,希望知道的能够大饱眼福。

boot/spring
cloud开垦计算,springcloud 背景
针对RPC远程调用,都在选取dubbo、dubbox等,大家也是这般。由于社区中断维护、应对前景发…

前题

dubbox是dubbo的二个升任版,简单说正是本来dubbo是Ali开拓的,今后Ali不保险了,当当网拿过去高歌猛进支付。本来Ali的dubbo维护到2.6本子,而再高版本的都是当当网维护的就叫成dubbox了。

dubbo的机制是那般的,首先有三个数额大旨zookeeper,这里zookeeper的搭建能够参照zookeeper集群搭建那篇博客,数据基本的效用独有二个,就是数额的囤积。

亚洲必赢官网 1

如图,提供者将自身的劳动音讯登记到zookeeper中,花费者从zookeeper中赢得提供者的服务新闻,富含提供者的ip,端口,服务类名参数,那样就可以一向伸手提供者所在的服务器,完毕调用。

spring Boot+spring Cloud达成微服务详细教程第二篇,springcloud

   上黄金年代篇散文已经证实了弹指间,关于spring
boot创立maven项目的简短步骤,相信广大熟知Maven+Eclipse作为支付常用工具的对象们都心中有数,那篇小说首要教师一下,创设spring
boot+spring
cloud达成微服务的框架搭建进度,可是早前大家要先掌握一下spring
boot+spring cloud服务框架的法力建设构造和局地常提及的概念。

1:注册大旨,spring boot+spring
cloud使用Eureka作为服务的挂号中央,早dubbo+zookeeper的微服务中也常采纳zookeeper作为劳动的登记大旨

2:服务治理,和劳动的调整

3:顾客端负载均衡(包涵常用的二种负载均衡攻略)

4:服务远程调节的容错保养,即电路设计中所谈起的保证丝(熔断机制)

5:spring cloud的注脚式远程调节

6:服务路由和服务的转速

笔者这里个人感到作为spring boot+spring
cloud塑造的微服务,熟知上面几点的定义,然后带着框架的概念再去有一些有面包车型客车看框架设计的庐山真面目目,起全局性和回顾性都了然入怀。

好了废话没有多少说下边大家开首创办spring boot+spring cloud的微服务吧。

(声明:JDK 1.8,spring boot:1.5.10.RELEASE,spring cloud:Edgware.SR2)

意气风发:成立服务的注册中央

File—->new—–>other

亚洲必赢官网 2

平时来讲图,大家选择Eureka Discov,和Eure
Server四个模块的零部件。搭建完毕大家来看一下搭建完毕后,大家来看一下搭建好的档案的次序目录结构,甚至项目所运用到的maven组件间的相互信任。

注:这里怎么要多啰嗦几句,来证实一下怎么,因为再接纳maven作为jar包间的互相注重,平日会出翔jar包版本的冲突,spring
boot和spring cloud就有版本的冲突。可是Eclipse再我们选用spring
Boot版本的时候就帮大家选定了最相配的版本,这里小友人本要特别注意。不然踩到坑了您会十分的惨烈。全部在人家项目里跑的66的代码到你这里就变得八面受敌。

亚洲必赢官网 3

这是项指标结果图,再上生龙活虎篇文章中我们介绍过了,这里就只是多的牵线,大家看看注册中央的代码,如下,石青部分,需求大家抬高注册中央的笺注表示。@EnableEurekaServer

亚洲必赢官网 4

 

 

作者们看看maven的jar包注重

亚洲必赢官网 5

 上边是,application.properties的布局文件。

亚洲必赢官网 6

为便于搭建的复制粘贴这里直接贴上代码如下,

#安装注册宗旨端口
server.port=8000
#流入的劳动应用名称
spring.application.name=registry-center
#康宁认证
security.basic.enabled=true
security.user.name=top-registry-center
security.user.password=123456
security.user.role=admin
eureka.instance.hostname=peer1
#关闭注册中央,注册本人到地点服务
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#登记大旨调节台地址

#eureka.client.serviceUrl.defaultZone=
#区区的登记中央布局音讯,标识注册中央的健康音信
eureka.instance.statusPageUrlPath=/info
eureka.instance.healthCheckUrlPath= /health

 下边大家,运营main方法

RegistryCenterApplication,如下所示,大家开采多了spring Boot
App,大家选中运维

亚洲必赢官网 7

下一场浏览器张开:输入local host:8000

亚洲必赢官网 8

 

 最后补充有些,看看如下作者此外的三个拜谒路径:peer1:8000,

亚洲必赢官网 9

此处是要布署windows的host主机名作为炫彩的。

亚洲必赢官网 10

正如所示:

亚洲必赢官网 11

大家看来127.0.0.1 localhost映射的就是大家的本机的地点

咱俩在这里地多加一下peer1的挂号中央地方配置

Boot+spring
Cloud完结微服务详细教程第二篇,springcloud
上风流罗曼蒂克篇小说已经证实了须臾间,关于spring
boot创设maven项指标简便步骤,相信广大熟稔…

一、dubbox maven导包

1、编写翻译安装

因为dubbox未有编写翻译发布,所以不可以知道通过maven拉取远程jar包,必要团结编写翻译安装到温馨的地面Maven酒馆中。从dubbox
github地址下载项目,在档案的次序根目录下运转

mvn install -Dmaven.test.skip=true 或者在powershell中运行 mvn clean
install package ‘-Dmaven.test.skip=true’

2、项目塑造

成立一个maven项目,项目下开创七个module,如图
(这几个dubbox是自家自身的种类命名,不是法定的dubbox)

亚洲必赢官网 12

此处供给专心,因为是模块项目,所以在dubboapi等module中的pom的parent是dubbox,不过大家的springboot也急需用spring-boot-starter-parent调控版本,所以spring-boot-starter-parent供给定义在dubbox的pom中,承继下来,但是本身在dubbox中央调整制子模块的jar包版本,那会导致贰个难题,正是本身在dubbox中的版本调节把spring-boot-starter-parent中的版本给冲突掉了。具体情形上边会说。

dubbox的pom

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>xin.shaozeming</groupId>    <artifactId>dubbox</artifactId>    <packaging>pom</packaging>    <version>1.0-SNAPSHOT</version>    <modules>        <module>dubboxserver</module>        <module>dubboxclient</module>        <module>dubboxapi</module>    </modules>    <properties>        <java.version>1.8</java.version>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    </properties>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.1.0.BUILD-SNAPSHOT</version>    </parent>    <dependencyManagement>        <dependencies>            <!-- dubbo  -->            <dependency>                <groupId>com.alibaba</groupId>                <artifactId>dubbo</artifactId>                <version>2.8.4</version>            </dependency>            <!--zookeeper -->            <dependency>                <groupId>com.github.sgroschupf</groupId>                <artifactId>zkclient</artifactId>                <exclusions>                    <exclusion>                        <groupId>log4j</groupId>                        <artifactId>log4j</artifactId>                    </exclusion>                </exclusions>                <version>0.1</version>            </dependency>            <dependency>                <groupId>net.dubboclub</groupId>                <artifactId>netty4</artifactId>                <version>0.0.6</version>            </dependency>            <dependency>                <groupId>org.apache.zookeeper</groupId>                <artifactId>zookeeper</artifactId>                <version>3.4.9</version>                <exclusions>                    <exclusion>                        <groupId>io.netty</groupId>                        <artifactId>netty</artifactId>                    </exclusion>                </exclusions>            </dependency>            <!--rest api-->            <dependency>                <groupId>org.jboss.resteasy</groupId>                <artifactId>resteasy-jaxrs</artifactId>                <version>3.0.7.Final</version>            </dependency>            <dependency>                <groupId>org.jboss.resteasy</groupId>                <artifactId>resteasy-client</artifactId>                <version>3.0.7.Final</version>            </dependency>            <!-- 如果要使用json序列化 -->            <dependency>                <groupId>org.jboss.resteasy</groupId>                <artifactId>resteasy-jackson-provider</artifactId>                <version>3.0.7.Final</version>            </dependency>            <!-- 如果要使用xml序列化 -->            <dependency>                <groupId>org.jboss.resteasy</groupId>                <artifactId>resteasy-jaxb-provider</artifactId>                <version>3.0.7.Final</version>            </dependency>            <!--kryo序列化-->            <dependency>                <groupId>com.esotericsoftware.kryo</groupId>                <artifactId>kryo</artifactId>                <version>2.24.0</version>            </dependency>            <dependency>                <groupId>de.javakaffee</groupId>                <artifactId>kryo-serializers</artifactId>                <version>0.26</version>            </dependency>            <!-- 如果要使用tomcat server -->            <dependency>                <groupId>org.apache.tomcat.embed</groupId>                <artifactId>tomcat-embed-logging-juli</artifactId>                <version>8.0.11</version>            </dependency>            <!-- 如果要使用netty server -->            <dependency>                <groupId>org.jboss.resteasy</groupId>                <artifactId>resteasy-netty</artifactId>                <version>3.0.7.Final</version>                <exclusions>                    <exclusion>                        <groupId>io.netty</groupId>                        <artifactId>netty</artifactId>                    </exclusion>                </exclusions>            </dependency>        </dependencies>    </dependencyManagement>    <!--&lt;!&ndash; Package as an executable jar &ndash;&gt;-->    <build>        <finalName>dubbox</finalName>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>                <executions>                    <execution>                        <goals>                            <goal>repackage</goal>                        </goals>                    </execution>                </executions>            </plugin>        </plugins>    </build>    <!-- Add Spring repositories -->    <!-- (you don't need this if you are using a .RELEASE version) -->    <repositories>        <repository>            <id>spring-snapshots</id>            <url>https://repo.spring.io/snapshot</url>            <snapshots>                <enabled>true</enabled>            </snapshots>        </repository>        <repository>            <id>spring-milestones</id>            <url>https://repo.spring.io/milestone</url>        </repository>    </repositories>    <pluginRepositories>        <pluginRepository>            <id>spring-snapshots</id>            <url>https://repo.spring.io/snapshot</url>        </pluginRepository>        <pluginRepository>            <id>spring-milestones</id>            <url>https://repo.spring.io/milestone</url>        </pluginRepository>    </pluginRepositories></project>

dubboxapi的pom

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <artifactId>dubbox</artifactId>        <groupId>xin.shaozeming</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>dubbox.api</artifactId>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>            <exclusions>                <exclusion>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter-logging</artifactId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-log4j2</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <exclusions>                <exclusion>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter-logging</artifactId>                </exclusion>            </exclusions>            <scope>test</scope>        </dependency>                <!--zookeeper -->        <dependency>            <groupId>com.github.sgroschupf</groupId>            <artifactId>zkclient</artifactId>        </dependency>        <dependency>            <groupId>net.dubboclub</groupId>            <artifactId>netty4</artifactId>        </dependency>        <dependency>            <groupId>org.apache.zookeeper</groupId>            <artifactId>zookeeper</artifactId>        </dependency>        <dependency>            <groupId>org.apache.tomcat.embed</groupId>            <artifactId>tomcat-embed-core</artifactId>        </dependency>        <dependency>            <groupId>org.apache.tomcat.embed</groupId>            <artifactId>tomcat-embed-logging-juli</artifactId>        </dependency>        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-netty</artifactId>        </dependency>        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-jaxrs</artifactId>        </dependency>        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-client</artifactId>        </dependency>        <dependency>            <groupId>javax.validation</groupId>            <artifactId>validation-api</artifactId>        </dependency>        <!--&lt;!&ndash; dubbo  &ndash;&gt;-->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>dubbo</artifactId>        </dependency>        <!-- 如果要使用json序列化 -->        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-jackson-provider</artifactId>        </dependency>        <!-- 如果要使用xml序列化 -->        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-jaxb-provider</artifactId>        </dependency>        <dependency>            <groupId>com.esotericsoftware.kryo</groupId>            <artifactId>kryo</artifactId>        </dependency>        <dependency>            <groupId>de.javakaffee</groupId>            <artifactId>kryo-serializers</artifactId>        </dependency>    </dependencies></project>

dubboxserver和dubboxclient的pom

   <dependencies>        <dependency>            <groupId>xin.shaozeming</groupId>            <artifactId>dubbox.api</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>    </dependencies>

精心看dubbox和dubboxapi中的jar包,dubboxapi中有tomcat-embed-core
和validation-api四个jar包,而dubbox的dependencyManagem中并从未调节版本,那是因为那五个包的版本是spring
boot parent里面版本控制承袭的tomcat-embed-core
springboot2私下认可的是本子是9,如若这里改成8版本。会现出如此的错

org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:155) ~[spring-boot-2.1.0.BUILD-20181030.064057-619.jar:2.1.0.BUILD-SNAPSHOT]    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:540) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.1.0.BUILD-20181030.064057-619.jar:2.1.0.BUILD-SNAPSHOT]    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.0.BUILD-20181030.064057-619.jar:2.1.0.BUILD-SNAPSHOT]    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.0.BUILD-20181030.064057-619.jar:2.1.0.BUILD-SNAPSHOT]    at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.0.BUILD-20181030.064057-619.jar:2.1.0.BUILD-SNAPSHOT]    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.0.BUILD-20181030.064057-619.jar:2.1.0.BUILD-SNAPSHOT]    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.0.BUILD-20181030.064057-619.jar:2.1.0.BUILD-SNAPSHOT]    at xin.shaozeming.dubboxclient.ClientStart.main(ClientStart.java:17) [classes/:?]Caused by: org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory(ServletWebServerApplicationContext.java:204) ~[spring-boot-2.1.0.BUILD-20181030.064057-619.jar:2.1.0.BUILD-SNAPSHOT]    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:178) ~[spring-boot-2.1.0.BUILD-20181030.064057-619.jar:2.1.0.BUILD-SNAPSHOT]    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:152) ~[spring-boot-2.1.0.BUILD-20181030.064057-619.jar:2.1.0.BUILD-SNAPSHOT]    ... 8 more

此间说这几个是意在读者对这么些题目放在心上一下,实际上这里不可能用tomcat,因为就算把那一个包改成9本子的,dubbox里面运行tomcat使用的api又有标题了,然则这里服务器能够用netty,这一个服务器是费用者和提供者之间通信的服务器,tomcat和netty的品质没什么分裂。所以上述有关tomcat服务器的jar包都得以删掉了,当然不删也没影响。

三、代码达成

provider提供者方面

先看看xml的实现

    <dubbo:application name="provider"/>    <dubbo:registry address="zookeeper://47.105.202.148:2181"/>

 <dubbo:annotation package="xin.shaozeming.dubboxserver.api" />

 <dubbo:protocol name="rest" port="8888" threads="500" contextpath="services" server="netty" accepts="500"/>

 <dubbo:service interface="xin.shaozeming.dubboxapi.service.UserService" ref="userService" protocol="rest"/>

javaconfig的实现

/** * @author: 邵泽铭 * @date: 2018/12/21 * @description: **/@Configurationpublic class config {    private static final String APPLICATION_NAME = "provider";    private static final String REGISTRY_ADDRESS = "zookeeper://47.105.202.148:2181";    private static final String ANNOTATION_PACKAGE = "xin.shaozeming.dubboxserver.api";    @Bean    public ApplicationConfig applicationConfig() {        ApplicationConfig applicationConfig = new ApplicationConfig();        applicationConfig.setName(APPLICATION_NAME);        return applicationConfig;    }    @Bean    public RegistryConfig registryConfig() {        RegistryConfig registryConfig = new RegistryConfig();        registryConfig.setAddress(REGISTRY_ADDRESS);        return registryConfig;    }    @Bean    public ProtocolConfig protocolConfig(){        ProtocolConfig protocolConfig=new ProtocolConfig();        protocolConfig.setName;        protocolConfig.setPort;        protocolConfig.setSerialization;        protocolConfig.setOptimizer(SerializationOptimizerImpl.class.getName;//        protocolConfig.setHost("192.168.0.244");        protocolConfig.setServer;        protocolConfig.setThreads;        protocolConfig.setAccepts;        protocolConfig.setExtension(                "com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter"        );        return protocolConfig;    }    @Bean    public AnnotationBean annotationBean() {        AnnotationBean annotationBean = new AnnotationBean();        annotationBean.setPackage(ANNOTATION_PACKAGE);        return annotationBean;    }}

以下是提供者的接口申明,这里这几个service不是spring的service,是dubbox里提供的注释

@Service(interfaceClass = UserService.class)public class UserServiceProvider implements UserService {   @Override    public User getUser() {       User user=new User();       user.setUserName("szm");       user.setPassword("123456");       return user;    }}

而rest的注释是内需配备在User瑟维斯 上的,因为
rest的批注不仅是提供者选用须求的时候需求,成本者发起号召的时候也亟需,早前正是因为那个难题,加上海消防费者端上没开日志,找了深远的bug。

UserService接口笔者是概念在dubboxapi里面包车型大巴

package xin.shaozeming.dubboxapi.service;import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType;import xin.shaozeming.dubboxapi.po.User;import javax.ws.rs.Consumes;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;/** * \* Created with IntelliJ IDEA. * \* User: 邵泽铭 * \* Date: 2018/12/21 * \* Time: 9:50 * \* Description: * \ */@Path("user")public interface UserService {    @GET    @Path("getUser")    @Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})    @Produces({ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})    public User  getUser();}

到此地提供者就铺排好了,再看花费者端

亚洲必赢官网 ,xml版本

<dubbo:application name="consumer"  />    <dubbo:registry address="zookeeper://47.105.202.148:2181" check="false" />    <!--uncomment this if you want to test dubbo's monitor-->    <!--<dubbo:monitor protocol="registry"/>-->    <dubbo:reference id="userService" interface="xin.shaozeming.dubboxapi.service.UserService"   />

javaconfig

@Configurationpublic class config {    private static final String APPLICATION_NAME = "consumer";    private static final String REGISTRY_ADDRESS = "zookeeper://47.105.202.148:2181";    private static final String ANNOTATION_PACKAGE = "xin.shaozeming.dubboxclient.controller";    @Bean    public ApplicationConfig applicationConfig() {        ApplicationConfig applicationConfig = new ApplicationConfig();        applicationConfig.setName(APPLICATION_NAME);        return applicationConfig;    }    @Bean    public RegistryConfig registryConfig() {        RegistryConfig registryConfig = new RegistryConfig();        registryConfig.setAddress(REGISTRY_ADDRESS);        return registryConfig;    }    @Bean    public AnnotationBean annotationBean() {        AnnotationBean annotationBean = new AnnotationBean();        annotationBean.setPackage(ANNOTATION_PACKAGE);        return annotationBean;    }}

@RestControllerpublic class UserController  {    @Reference(interfaceClass=UserService.class)    private UserService userService;    @GetMapping("/user")    public User getUser(){        return userService.getUser();    }    }

到此花费者端就也安插好了

关于duubox的日记,不亮堂为啥log4j配置了也落到实处持续,可是新兴翻了翻代码,发掘能够通过系统性格选取日志达成,start类里面参与以下代码,spring
boot整合log4j2足以看那篇作品 sprintboot2整合log4j2

System.setProperty("dubbo.application.logger","slf4j");

再有一个难题,就是对于provider提供者来讲,只须求多少个netty服务器端口提供劳动就足以了,而用springboot运行的时候,springboot会运转二个web,加上netty正是多个服务器,那明摆着没什么需求,所以能够将spring
boot设置成不以web运营格局运营

/** * @author: 邵泽铭 * @date: 2018/12/21 * @description: **/@SpringBootApplication//@ImportResource("classpath:dubbo-provider.xml")public class ServerStart {   public static void main(String[] args) throws Exception{       System.setProperty("org.springframework.boot.logging.LoggingSystem","org.springframework.boot.logging.log4j2.Log4J2LoggingSystem");       System.setProperty("dubbo.application.logger","slf4j");       new SpringApplicationBuilder(ServerStart.class)               .web(WebApplicationType.NONE)               .run;   }}

万事策画完毕以后,运营运作

亚洲必赢官网 13

居功至伟告成!!!

demo项目github地址

网站地图xml地图