springboot combiné avec dubbo
Dubbo combiné avec spring doit être configuré dans le fichier de configuration. Lorsqu'il est combiné avec springboot, vous pouvez utiliser le fichier de configuration application.yml ou application.properties. Personnellement, je préfère utiliser springboot.
Sans parler de tant de choses, ce que vous obtenez du code est le plus profond.
Créer un projet maven
Créer un module de fournisseur Springboot
step0: Après la création, introduisez la dépendance du package jar dans pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--web项目-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--dubbo ali apache-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.itzz</groupId>
<artifactId>dubbo02-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
Étape 1 Modifiez le suffixe du fichier application.properties en suffixe .yml, la configuration dans le fichier de configuration
dubbo:
application:
name: dubbo02-provider
registry:
address: zookeeper://localhost:2181
protocol:
port: 20880
name: dubbo
scan:
base-packages: com.itzz.provider.service.Impl
#自定义当前应用版本号
application:
version: 1.0.0
#修改web项目启动默认的端口号
server:
port: 8081
Créez la structure de package appropriée, puis créez les fonctions appropriées dans le package Impl du service
import com.itzz.provider.service.UserService;
import org.apache.dubbo.config.annotation.Service;
@Service(version = "${application.version}")
public class UserServiceImpl implements UserService {
@Override
public String getName(int id) {
System.out.println("------1------");
if (id == 1){
return "张三";
}else if (id == 2){
return "李四";
}
return "傻蛋";
}
}
@Service (version = "$ {application.version}") fait référence au numéro de version dans le fichier de configuration. Si la version est mise à jour ultérieurement, vous ne pouvez pas la modifier une par une, alors ajoutez des notes pertinentes. Ma structure de package ressemble à ceci:
Créer un module api (module de structure maven)
Créez la même structure de package que le module du fournisseur dans le module api
public interface UserService {
public String getName(int id);
}
Structure du package
Créer un module de démarrage de printemps grand public
step0: package jar de pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.itzz</groupId>
<artifactId>dubbo02-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
Assurez-vous d'introduire la dépendance api, sinon une erreur sera signalée, indiquant que le suffixe du fichier de configuration généré automatiquement par springboot ne peut pas être trouvé dans l'interface UserService
step1: ou remplacez-le par le suffixe .yml. Ce sont les mêmes que les informations de configuration utilisées lors de la combinaison du ressort.
dubbo:
application:
name: dubbo02-consumer
registry:
address: zookeeper://localhost:2181
scan:
base-packages: com.itzz.provider.service.Impl
#自定义当前应用版本号
application:
version: 1.0.0
#修改web项目启动默认的端口号
server:
port: 8082
étape 2: créez une couche Web et le Web appelle directement les méthodes définies dans l'interface.
import com.itzz.provider.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Reference(version = "${application.version}")
private UserService userService;
@RequestMapping("getName")
public String getName(Integer id){
return userService.getName(id);
}
}
La structure du package est la suivante:
le projet est terminé ici, démarrez d'abord la classe principale du fournisseur, puis démarrez la classe principale du consommateur, le reste est à tester dans le centre de gestion.
Test dans le centre de contrôle
Entrez http: // localhost: 7001 / dans la page Web pour accéder au centre de gestion (bien sûr, le principe est que votre centre de gestion est activé). L'ajout d'un fournisseur est identique à la fonction ci-dessus, créant un cluster de fournisseurs.
Ensuite, voyez si les deux ont été enregistrés dans le centre de surveillance
Accédez à l'url de la page Web via le port du consommateur, comme indiqué ci-dessous:
Poids
Poids: j'ai défini un poids de 300 sur la deuxième classe d'implémentation fournie, de sorte que les chances d'accès seront supérieures à celles du premier fournisseur.
Désactiver signifie interdire l'utilisation, et ce fournisseur n'est plus utilisé.
Affiché dans le centre de service
Stratégie d'équilibrage de charge
La stratégie d'équilibrage de charge de Dubbo est l'accès aléatoire. Parce que la stratégie d'équilibrage de charge par défaut de Dubbo est aléatoire, en plus de l'interrogation aléatoire (deux fournisseurs se côtoient) et de la moindre concurrence (comme là où il y a moins de personnes dans la file d'attente).
Stratégie aléatoire
Aléatoire lorsque les poids sont les mêmes
Stratégie de sondage
Le nombre de visites chez le fournisseur est le même.