一、使用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;
}
}
啓動然後測試,測試和一一樣。