dubbo使用小全 分析 理解 附GitHub 原始碼 ( 二 )
阿新 • • 發佈:2018-12-19
宣告
1.搭建簡單工程:
在springboot大行其道的今天,本文用純註解方式使用dubbo
1.依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.4</version> </dependency> <!--補充dubbo依賴的netty包--> <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>3.1.2</version> </dependency>
2.provider
2.1 服務提供方配置資訊,以後的各種使用,基本都在此處
/** * @author peichanglei * @date 2018/11/02 12:16 */ @Configuration public class DubboProviderConfig { @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName("provider-test"); return applicationConfig; } @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress("multicast://224.5.6.7:1234"); registryConfig.setClient("curator"); return registryConfig; } @Bean public ProviderConfig providerConfig() { ProviderConfig providerConfig = new ProviderConfig(); /** * 叢集容錯模式,設定重試次數(不含第一次) */ providerConfig.setRetries(2); return providerConfig; } }
2.2.具體提供的服務,真實的專案中需單獨打包此介面,讓提供,消費雙方方使用 2.3 application啟動類上加暴露服務掃描
@SpringBootApplication
@DubboComponentScan(basePackages = "com.lei.record.service.impl")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2.4實現服務,對外暴露
import com.alibaba.dubbo.config.annotation.Service;
import com.lei.record.service.UserService;
/**
* @author peichanglei
* @date 2018/11/02 2:00
*/
@Service(timeout = 3000)
public class UserServiceImpl implements UserService {
@Override
public String getUser(Long id) {
return "provider user " + id;
}
}
注意:此處使用dubbo的Service註解暴露,不能是spring的
3.consumer
3.1服務提供方配置資訊,以後的各種使用,基本都在此處
@Configuration
public class DubboConfiguration {
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("consumer-test1");
//經典錯誤導致:dubbo的qos預設埠為22222,區別於應用埠和dubbo服務埠,如果在一臺機器上啟動超過1個dubbo服務,就會衝突,不管是provider還是consumer
applicationConfig.setQosPort(22223);
return applicationConfig;
}
@Bean
public ConsumerConfig consumerConfig() {
ConsumerConfig consumerConfig = new ConsumerConfig();
consumerConfig.setTimeout(3000);
//啟動時檢查,預設為true,當服務不可用或多個應用存在迴圈依賴,需關閉檢測,以防啟動失敗,若後面時間中,服務恢復,dubbo的心跳檢查會自動連上
consumerConfig.setCheck(false);
return consumerConfig;
}
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("multicast://224.5.6.7:1234");
registryConfig.setClient("curator");
return registryConfig;
}
}
3.2 引入定義好的介面jar包,不在贅述 3.3 application啟動類上加引用服務包的掃描
@SpringBootApplication
@DubboComponentScan(basePackages = "com.lei.record.service")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3.4服務消費
@Controller
public class User {
@Reference
private UserService userService;
@RequestMapping(value = "getName", method = {RequestMethod.GET}, produces = "application/json")
@ResponseBody
public String getName() {
String result;
if (userService != null) {
String user = userService.getUser(12L);
System.out.println("呼叫成功------" + user);
result = "呼叫成功------" + user;
} else {
System.out.println("呼叫失敗------");
result = "呼叫失敗------";
}
return result;
}
}
import com.alibaba.dubbo.config.annotation.Reference註解可注入可使用的服務
4,至此,一個基於dubbo的生產消費架構搭建完成
頁面訪問顯示呼叫成功 以上為簡單呼叫,更多的配置資訊科參考下篇.