博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
32、SpringBoot-整合Dubbo
阅读量:5820 次
发布时间:2019-06-18

本文共 6361 字,大约阅读时间需要 21 分钟。

分布式应用

在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,

Spring Boot+Spring Cloud。

 

分布式系统:

 

 Zookeeper和Dubbo

ZooKeeper
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。
它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、
域名服务、分布式同步、组服务等。
Dubbo 
Dubbo是Alibaba开源的分布
式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个
层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo
采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,
所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

 

 

 dockers安装zookeeper

 

官方运行的解释命令:

启动:

 

整合dubbo的依赖

 

测试代码的使用:

服务提供者:

引入依赖:

com.alibaba.boot
dubbo-spring-boot-starter
0.2.0

 

 

提供服务的接口类:

这个类在
服务消费者中也要进行使用
所以此时需要保证该类的所在包位置相同
在开发中可以将该类与实体类提取出来,然后再引入到工程中进行使用
如使用maven工程进行打包成jar
package com.cr.provider.service;public interface TicketService {    public String getTicket();}

 

 

服务接口类的实现:

package com.cr.provider.service.impl;import com.alibaba.dubbo.config.annotation.Service;import com.cr.provider.service.TicketService;import org.springframework.stereotype.Component;@Component//import com.alibaba.dubbo.config.annotation.Service;@Service//暴露服务public class TicketServiceImpl implements TicketService {    @Override    public String getTicket() {        return "战狼2";    }}

 

此时的@Service是将服务的实现暴露出去,该注解中还有许多的配置,如超时等
@Component是将该类加入到spring容器中

 

配置文件: 

#名字dubbo.application.name=provider#dubbo.registry.address=zookeeper://192.168.43.157:2181#dubbo.registry.protocol=zookeeper#dubbo.protocol.name=dubbodubbo.protocol.port=20880#dubbo.monitor.protocol=registry#dubbo.scan.base-packages=com.cr.provider.service

 

 

主程序:

package com.cr.provider;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@EnableDubbopublic class ProviderApplication {    public static void main(String[] args) {        SpringApplication.run(ProviderApplication.class, args);    }}

 

@EnableDubbo用于开启关于dubbo的注解

 

 

服务消费者

引入依赖: 

com.alibaba.boot
dubbo-spring-boot-starter
0.2.0

 

 

服务消费者调用的服务提供者实现的接口类
此时的两个工程中的报名必须一致
开发中使用工程引入依赖
package com.cr.provider.service;public interface TicketService {    public String getTicket();}

 

 

用于调用TicketService实现的方法

package com.cr.consumer.service;public interface UserService {    public void hello();}

 

 

实现类

package com.cr.consumer.service.impl;import com.alibaba.dubbo.config.annotation.Reference;import com.cr.consumer.service.UserService;import com.cr.provider.service.TicketService;import org.springframework.stereotype.Service;@Servicepublic class UserServiceImpl implements UserService {    @Reference    TicketService ticketService;    public void hello(){        System.out.println("ticketService:" + ticketService);        String ticket = ticketService.getTicket();        System.out.println("buy:" + ticket);    }}

 

@Reference用于自动注入dubbo容器中的服务
 
配置:
dubbo.application.name=consumerdubbo.registry.address=zookeeper://192.168.43.157:2181

 

 

主类中:

@EnableDubbo@SpringBootApplicationpublic class ConsumerApplication {    public static void main(String[] args) {        SpringApplication.run(ConsumerApplication.class, args);    }}

 

用于开发Dubbo的注解@EnableDubbo

 

测试时:服务提供者必须处于工作的状态

@AutowiredUserService userService;@Testpublic void tt(){    userService.hello();}

 

测试结果:

 

@Reference

@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})public @interface Reference {    Class
interfaceClass() default void.class; String interfaceName() default ""; String version() default ""; String group() default ""; String url() default ""; String client() default ""; boolean generic() default false; boolean injvm() default false; boolean check() default true; boolean init() default false; boolean lazy() default false; boolean stubevent() default false; String reconnect() default ""; boolean sticky() default false; String proxy() default ""; String stub() default ""; String cluster() default ""; int connections() default 0; int callbacks() default 0; String onconnect() default ""; String ondisconnect() default ""; String owner() default ""; String layer() default ""; int retries() default 0; String loadbalance() default ""; boolean async() default false; int actives() default 0; boolean sent() default false; String mock() default ""; String validation() default ""; int timeout() default 0; String cache() default ""; String[] filter() default {}; String[] listener() default {}; String[] parameters() default {}; String application() default ""; String module() default ""; String consumer() default ""; String monitor() default ""; String[] registry() default {};}

  

 @Service

@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})@Inheritedpublic @interface Service {    Class
interfaceClass() default void.class; String interfaceName() default ""; String version() default ""; String group() default ""; String path() default ""; boolean export() default false; String token() default ""; boolean deprecated() default false; boolean dynamic() default false; String accesslog() default ""; int executes() default 0; boolean register() default false; int weight() default 0; String document() default ""; int delay() default 0; String local() default ""; String stub() default ""; String cluster() default ""; String proxy() default ""; int connections() default 0; int callbacks() default 0; String onconnect() default ""; String ondisconnect() default ""; String owner() default ""; String layer() default ""; int retries() default 0; String loadbalance() default ""; boolean async() default false; int actives() default 0; boolean sent() default false; String mock() default ""; String validation() default ""; int timeout() default 0; String cache() default ""; String[] filter() default {}; String[] listener() default {}; String[] parameters() default {}; String application() default ""; String module() default ""; String provider() default ""; String[] protocol() default {}; String monitor() default ""; String[] registry() default {};}

 

转载于:https://www.cnblogs.com/Mrchengs/p/10475470.html

你可能感兴趣的文章
C语言数据类型char
查看>>
Online Patching--EBS R12.2最大的改进
查看>>
Binary Search Tree Iterator leetcode
查看>>
uva-317-找规律
查看>>
Event事件的兼容性(转)
查看>>
我的2014-相对奢侈的生活
查看>>
zoj 2412 dfs 求连通分量的个数
查看>>
Java设计模式
查看>>
一文读懂 AOP | 你想要的最全面 AOP 方法探讨
查看>>
Spring Cloud 微服务分布式链路跟踪 Sleuth 与 Zipkin
查看>>
ORM数据库框架 SQLite 常用数据库框架比较 MD
查看>>
华为OJ 名字美丽度
查看>>
微信公众号与APP微信第三方登录账号打通
查看>>
onchange()事件的应用
查看>>
Windows 下最佳的 C++ 开发的 IDE 是什么?
查看>>
软件工程师成长为架构师必备的十项技能
查看>>
python 异常
查看>>
百度账号注销
查看>>
mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
查看>>
BIEE Demo(RPD创建 + 分析 +仪表盘 )
查看>>