说明:dobbu-admin下载地址:
https://github.com/apache/dubbo-admin/tree/master。然后用idea导入并启动。如果启动失败可以看我前几篇文章
(一). 导入dubbo-starter 在properties配置属性,使用@service 暴露服务 @reference 引用服务,使用@Enabledubbo在启动类
具体步骤:
生产者
创建一个springboot项目,在pom中导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.jym</groupId>
<artifactId>jym-service-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
启动类上加@EnableDubbo 注解
package com.jym.jymprovider;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class JymproviderApplication {
public static void main(String[] args) {
SpringApplication.run(JymproviderApplication.class, args);
}
}
在服务的类上加 @Service 注意是Dubbo包下的
package com.jym.jymprovider.service.impl;
import com.jym.bean.UserAddress;
import com.jym.service.UserService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @program: jymprovider
* @description:
* @author: jym
* @create: 2020/02/18
*/
@Service
@com.alibaba.dubbo.config.annotation.Service
public class UserServiceImpl implements UserService {
@Override
public List<UserAddress> getUserAddressList(String s) {
List<UserAddress> userAddressList = new ArrayList<>();
if(null == s){
return userAddressList;
}
if (Math.random()>0.5) {
throw new RuntimeException();
}
UserAddress userAddress = new UserAddress();
userAddress.setUserAddress("喵星");
userAddress.setUserId(s);
userAddress.setPhoneNum("10086");
userAddress.setIsDefault("1");
userAddress.setConsignee("加菲猫");
userAddressList.add(userAddress);
return userAddressList;
}
}
配置注册中心等
server.port=8081
dubbo.application.name=jymUserProvider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20020
dubbo.monitor.address=127.0.0.1:8080
如果需要其他的配置都可以在application.properties中配置
消费者
同样导入依赖包,与生产者一样,除了生产消费者自己公用的包,还需要引入dubbo的包
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
对需要调用生产者的类,加上@Reference注解
@Service
public class OrderServiceImpl implements OrderService {
@Reference
private UserService userService;
@Override
public List<UserAddress> initOrder(String s) {
return userService.getUserAddressList(s);
}
}
controller 层:
package com.jym.jymconsumer.controller;
import com.jym.bean.UserAddress;
import com.jym.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @program: jymconsumer
* @description:
* @author: jym
* @create: 2020/02/18
*/
@RestController
public class OrderController {
@Autowired
private OrderService orderService;
@RequestMapping("/order/{id}")
public List initOrder (@PathVariable String id) {
List<UserAddress> userAddresses = orderService.initOrder(id);
return userAddresses;
}
}
生产消费者都启动之后,页面调用:
(二)导入dubbo-starter 保留dubbo.xml配置文件 通过ImportResource(locations=“classPath:dubbo.xml”)
可以保留原有的配置文件,放到resources文件夹内
然后在启动类上加入@ImportResource(locations=“classPath:dubbo.xml”)注解即可。
好处:精确到方法的配置,可以配置某些方法
注意:@Enabledubbo注解的作用是包扫描,所以这种方式不需要加入这个注解
(三) 注解配置 使用API配置,将组建手动配置在IOC容器中 加上 @Enabledubbo
将每一个组件,手动配置到容器中,每个xml标签 都对应一个类xxxConfig
具体实现:
package com.jym.jymprovider.config;
import com.alibaba.dubbo.config.*;
import com.jym.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
/**
* @program: jymprovider
* @description:
* @author: jym
* @create: 2020/02/20
*/
@Configuration
public class DubboConfig {
// 对应application标签
@Bean
public ApplicationConfig applicationConfig () {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("jymUserProvider");
return applicationConfig;
}
// 对应registry标签
@Bean
public RegistryConfig registryConfig () {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setProtocol("zookeeper");
registryConfig.setAddress("127.0.0.1:2181");
return registryConfig;
}
// 对应protocol标签
@Bean
public ProtocolConfig protocolConfig () {
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setName("dubbo");
protocolConfig.setPort(22020);
return protocolConfig;
}
// 对应monitor标签
@Bean
public MonitorConfig monitorConfig () {
MonitorConfig monitorConfig = new MonitorConfig();
monitorConfig.setAddress("127.0.0.1:8080");
return monitorConfig;
}
// 对应service 标签
@Bean
public ServiceConfig<UserService> userServiceConfig (UserService userService) {
ServiceConfig serviceConfig = new ServiceConfig();
serviceConfig.setInterface(UserService.class);
serviceConfig.setRef(userService);
serviceConfig.setVersion("1.0.0");
serviceConfig.setTimeout(5000);
// 对应method标签,配置方法
MethodConfig methodConfig = new MethodConfig();
methodConfig.setName("getUserAddressList");
methodConfig.setRetries(5);
List<MethodConfig> methodConfigs = new ArrayList<>();
methodConfigs.add(methodConfig);
serviceConfig.setMethods(methodConfigs);
return serviceConfig;
}
}
然后在启动类上还是加上@EnableDubbo(scanBasePackages= “com.jym.jymprovider”),需要扫描包,扫描配置类