一、使用yml或者properties等配置文件
新建code-boot的项目
依赖为
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
新建code-boot的子项目:boot-gmall-interface,有一个类,两个接口
package com.atguigu.gmall.bean;
import java.io.Serializable;
public class UserAddress implements Serializable {
private Integer Id;
private String userAddress;
@Override
public String toString() {
return "UserAddress{" +
"Id=" + Id +
", userAddress='" + userAddress + '\'' +
", userId='" + userId + '\'' +
", consignee='" + consignee + '\'' +
", phneNum='" + phneNum + '\'' +
", isDefault='" + isDefault + '\'' +
'}';
}
private String userId;
public Integer getId() {
return Id;
}
public void setId(Integer id) {
Id = id;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getConsignee() {
return consignee;
}
public void setConsignee(String consignee) {
this.consignee = consignee;
}
public String getPhneNum() {
return phneNum;
}
public void setPhneNum(String phneNum) {
this.phneNum = phneNum;
}
public String getIsDefault() {
return isDefault;
}
public void setIsDefault(String isDefault) {
this.isDefault = isDefault;
}
private String consignee;
private String phneNum;
private String isDefault;
public UserAddress() {
super();
}
public UserAddress(Integer id, String userAddress, String userId, String consignee, String phneNum, String isDefault) {
Id = id;
this.userAddress = userAddress;
this.userId = userId;
this.consignee = consignee;
this.phneNum = phneNum;
this.isDefault = isDefault;
}
}
package com.atguigu.gmall.service;
import com.atguigu.gmall.bean.UserAddress;
import java.util.List;
public interface OrderService {
/**
* 初始化订单
* @param userId
*/
public List<UserAddress> initOrder(String userId);
}
package com.atguigu.gmall.service;
import com.atguigu.gmall.bean.UserAddress;
import java.util.List;
public interface UserService {
/**
*按照用户id返回地址
* @param userId
* @return
*/
public List<UserAddress> getUserAddressList(String userId);
}
再次新建code-boot的子项目:boot-user-service-provider
依赖为:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>boot-gmall-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
</dependencies>
yml配置文件
server:
port: 8090
dubbo:
application:
name: user-service-provider
registry:
address: 127.0.0.1:2181
protocol: zookeeper
timeout: 5000
protocol:
name: dubbo
port: 20881
monitor:
protocol: registry
scan:
base-packages: com.atguigu.gmall
启动类
@EnableDubbo //开启基于注解的dubbo功能
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class);
}
}
服务实现类
package com.atguigu.gmall.service.impl;
import java.util.Arrays;
import java.util.List;
import com.alibaba.dubbo.config.annotation.Service;
import com.atguigu.gmall.bean.UserAddress;
import com.atguigu.gmall.service.UserService;
import org.springframework.stereotype.Component;
@Service //暴露服务
@Component
public class UserServiceImpl implements UserService {
@Override
public List<UserAddress> getUserAddressList(String userId) {
System.out.println("UserServiceImpl.....old...");
// TODO Auto-generated method stub
UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
/*try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
return Arrays.asList(address1,address2);
}
}
再次新建code-boot的子项目:boot-order-service-consumer
依赖为:
<dependencies>
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>boot-gmall-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
</dependencies>
yml配置
server:
port: 8091
dubbo:
application:
name: order-service-consumer
registry:
address: zookeeper://127.0.0.1:2181
monitor:
protocol: registry
启动项
package com.atguigu.gmall;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class);
}
}
controller
package com.atguigu.gmall.controller;
import com.atguigu.gmall.bean.UserAddress;
import com.atguigu.gmall.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.Null;
import java.util.List;
@RestController
public class OrderController {
@Autowired
OrderService orderService;
@RequestMapping("/initOrder")
public List<UserAddress> initOrder(@RequestParam("uid") String userId){
return orderService.initOrder(userId);
}
}
service
package com.atguigu.gmall.service.impl;
import com.alibaba.dubbo.config.annotation.Reference;
import com.atguigu.gmall.bean.UserAddress;
import com.atguigu.gmall.service.OrderService;
import com.atguigu.gmall.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 1.将服务提供者注册到注册中心
* 1.1导入dubbo依赖(2.6.2)/操作zookeeper的客户端(操作zookeeper的客户端)
* 1.2配置服务提供者
* 2.让服务消费者去注册中心订阅服务提供者和地址
*/
@Service
public class OrderServiceImpl implements OrderService {
// @Autowired
// @Reference(url = "127.0.0.1:20881")//dubbo直连
@Reference//暴露服务
UserService userService;
@Override
public List<UserAddress> initOrder(String userId){
System.out.println("用户id:"+ userId);
List<UserAddress> addressList = userService.getUserAddressList(userId);
return addressList;
}
}
然后将项目启动,我们在浏览器地址栏输入:localhost:8091/initOrder?uid=1
可以发现我们调用成功。
二、xml文件导入配置
将boot-user-service-provider的yml配置注释掉,加上一个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--1.指定当前服务/应用的名字()同样的服务名字相同,不要和别的服务同名-->
<dubbo:application name="user_service_provider"></dubbo:application>
<!--2.指定注册中心的位置-->
<dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
<!-- <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>-->
<!--3.指定通信的规则(协议和端口)-->
<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
<!--4.暴露服务 ref指向真正的实现对象-->
<dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userServiceImpl" ></dubbo:service>
<!--4.服务的实现-->
<bean id="userServiceImpl" class="com.atguigu.gmall.service.impl.UserServiceImpl"></bean>
<!--4.链接监控中心-->
<dubbo:monitor protocol="registry"></dubbo:monitor>
</beans>
启动测试即可,和一是一样的。。
三、使用注解api方式 将每个组件手动创建到容器中
将xml和yml配置均注释,在boot-user-service-provider中添加一个配置文件
package com.atguigu.gmall.config;
import com.alibaba.dubbo.config.*;
import com.atguigu.gmall.service.UserService;
import org.apache.catalina.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.validation.constraints.Max;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class MyDubboConfig {
@Bean
public ApplicationConfig applicationConfig(){
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("boot-user-service-provider");
return applicationConfig;
}
@Bean
public RegistryConfig registryConfig(){
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setProtocol("zookeeper");
registryConfig.setAddress("127.0.0.1:2181");
return registryConfig;
}
@Bean
public ProtocolConfig protocolConfig(){
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setName("dubbo");
protocolConfig.setPort(20882);
return protocolConfig;
}
@Bean
public ServiceConfig<UserService> userServiceServiceConfig(UserService userService){
ServiceConfig<UserService> serviceConfig = new ServiceConfig<>();
serviceConfig.setInterface(UserService.class);
serviceConfig.setRef(userService);
serviceConfig.setVersion("1.0.0");
//配置每一个method的信息
MethodConfig methodConfig = new MethodConfig();
methodConfig.setName("getUserAddressList");
methodConfig.setTimeout(1000);
//将method的设置保存到service的配置中
List<MethodConfig> methodConfigs = new ArrayList<>();
methodConfigs.add(methodConfig);
serviceConfig.setMethods(methodConfigs);
return serviceConfig;
}
}
启动然后测试,测试和一一样。