springboot与dubbo简单搭配流程及常用注解参数

大体是分成三个项目跑通一个流程.
1:服务对外提供的api(对内是接口)
2:服务的实现(业务逻辑)
3:消费端消费

我的具体操作:

  1. 先创建一个maven的空项目作为父工程,用来框主服务端的两个项目(服务的API和API的实现)
    1.1 如图
    在这里插入图片描述
    1.2 API项目详情(server-api):
    pom.xml文件里没有啥,因为这个项目只是为了提供写接口.
    我就写了一个接口用来演示

    public interface IHello {
        String hello(String msg);
    }
    

    可以看到这代码啥也没有,没有任何springboot的注解,也没有dubbo相关的代码,就是简单.
    1.3 服务的实现项目(server-provider):
    pom引入包

    		<!-- 引入自己写的server-api这个包,不然写实现的时候找不到这个借口类 -->
    		<dependency>
    			<groupId>com.qingnian</groupId>
    			<artifactId>server-api</artifactId>
    			<version>1.0-SNAPSHOT</version>
    		</dependency>
    
    		<!-- 引入spring-boot-starter以及dubbo和curator的依赖 -->
    		<dependency>
    			<groupId>com.alibaba.boot</groupId>
    			<artifactId>dubbo-spring-boot-starter</artifactId>
    			<version>0.2.0</version>
    		</dependency>
    		<!-- Spring Boot相关依赖 -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.11</version>
    			<scope>test</scope>
    		</dependency>
    

    application.yml 配置.

    server:
      port: 8090
    
    dubbo:
      application:
        #注册到注册中心的名称
        name: server-provider
      #采用协议和端口号
      protocol:
        #采用dubbo协议
        name: dubbo
        #发布dubbo端口号为20880
        port: 20880
      registry:
        #注册中心地址,zk的集群一定要用backup连起来.
        address: zookeeper://192.168.9.100:2181?backup=192.168.9.101:2181,192.168.9.102:2181
    
    spring:
      output:
        ansi:
          #日志
          enabled: always
    

    代码部分
    实现类:消费端调用的是接口.就是由以下的实现类处理(如果你有多个实现类,消费端可以指定版本号来实现让那个实现类来做处理)

    import com.alibaba.dubbo.config.annotation.Service;
    /*
     * @Service是dubbo提供的不是spring的.
     * version:版本号.当前这个实现类的版本信息
     */
    @Service(version = "1.0")
    public class HelloImpl implements IHello {
        @Override
        public String hello(String msg) {
            System.out.println(msg);
            return msg;
        }
    }
    

    springboot启动类

    /*启动类主要就是加这个了,让dubbo的注解在代码里起作用,没有这个上面的那个server注解就起不到作用了*/
    @EnableDubbo
    @SpringBootApplication
    public class ServerProviderApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(ServerProviderApplication.class, args);
    	}
    
    }
    
  2. 消费端项目
    2.1. 消费端就直接起一个springboot项目
    pom导包和上面的(server-provider)一样;
    application.yml 配置也差不多,修改下端口号和注册名称就好

    dubbo:
      application:
        #注册到注册中心的名称
        name: dubbo-client
    

    代码部分了

    @RestController
    public class MsgController {
    
        @Reference(version = "1.0") // 这个就是注入了IHello这个接口类的实现类(看:带了版本号,这个借口可能会有多个实现类.版本号就很好用了)
        private IHello helloImpl;
    
        @ResponseBody
        @RequestMapping("/")
        public Object hi(String msg){
            helloImpl.hello(msg); // 这不就和注入server层代码一样的用了嘛
            return msg;
        }
    
    }
    

    springboot启动类也和(server-provider)一样;

好了,简单的流程就到这里了.当然实现类里的那个@server里还有很多dubbo的参数可以填,比如超时时间,啥的,例子就举了个版本号为例子.同理消费端的@Reference也是一样.

这里问题就来了:如果服务端的@server和消费端的@Reference配置了相同的配置,那么以那边为准呢?

答案就是:以消费端为准.好比你去买奶茶,商家推荐你买大或中或小三个杯子的奶茶,你买奶茶当然是当然是你做主,你说买啥杯就买啥杯(当然罗永浩和星巴克的那次除外).

下面介绍dubbo注解常用参数了

参数意思
官网地址http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-service.html
version版本号:(version = “1.0”)
cluster集群容错机制:(cluster = “failfast”)
↑可选参数解释failover(默认:重试其他服务器.retries:重试次数) / failfast(失败立马报错) / failsafe(安全失败:不在乎这个错误,但是记录日志) / failback( 失败自动恢复) / forking(并行调用多个服务,只要一个成功即返回.forks:并行数)
timeout超时时间:(timeout = 1000) 单位是毫秒
mock服务降级(比如超时,网络异常等触发):(mock = “com.qingnian.dubboClient.Controller.IHelloMock”)
↑解释比如说某根据用户习惯查询推荐的API设置了超时时间,执行时刚好超过所设置的超时时间(比如者服务端挂了导致超时),这时候你无法活的到针对用户的推荐,这时候你又不想直接报错.这时候就可以走mock指定的本地路径方法返回一些通用的推荐(mock指定的方法也是实现了同一个接口的类)
loadbalance负载均衡策略:(loadbalance =“roundrobin”)
↑可选参数解释random(随机),roundrobin(轮询),leastactive(最少活跃)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值