0
点赞
收藏
分享

微信扫一扫

Dubbo 学习2 Dubbo-Admin及服务注册到Zookeeper

DYBOY 2022-06-28 阅读 142


Dubbo 学习2 Dubbo-Admin及服务注册到Zookeeper

  • ​​一、准备环境​​
  • ​​1. 需要先安装好zookeeper​​
  • ​​2. 下载编译dubbo-admin​​
  • ​​3. 配置文件​​
  • ​​4. 登陆系统​​
  • ​​二、代码实现​​
  • ​​interface​​
  • ​​生产者​​
  • ​​消费者​​
  • ​​三、问题处理​​
  • ​​1. 看看主机名是不是 localhost.localdomain​​
  • ​​2. 在hosts里添加记录​​
  • ​​3. 要检查消费的ip是不是也使用了自身的私有ip​​

一、准备环境

1. 需要先安装好zookeeper

安装启动zookeeper后,输入jps,看到输出:
Dubbo 学习2 Dubbo-Admin及服务注册到Zookeeper_zookeeper

2. 下载编译dubbo-admin

检出 https://github.com/alibaba/dubbo ,
整个项目编译。有的文章讲只编译dubbo-admin就可以,但我没成功。
如果编译失败,多试几次。我试了很多次才成功了。

cd dubbo-master/
mvn install -Dmaven.test.skip=true

将生成的dubbo-admin-..*-SNAMPSHOT.war 部署到tomcat

3. 配置文件

部署后,修改WEB-INFO/dubbo.properties

dubbo.registry.address=zookeeper://127.0.0.1:2181  
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

4. 登陆系统

账号密码是root/root
Dubbo 学习2 Dubbo-Admin及服务注册到Zookeeper_zookeeper_02

二、代码实现

类似前一章的代码,只是服务注册方式不同
Dubbo 学习2 Dubbo-Admin及服务注册到Zookeeper_zookeeper_03

interface

DemoService

package com.alibaba.dubbo.demo;

public interface DemoService {
String sayHello(String name);
}

生产者

Provider.java

package com.alibaba.dubbo.demo;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {
public static void main(String[] args) throws Exception {

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "dubbo-demo-provider.xml" });

context.start();
System.in.read();
}
}

DemoServiceImpl

package com.alibaba.dubbo.demo.provider;

import com.alibaba.dubbo.demo.DemoService;

public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return "Hello " + name;
}
}

dubbo-demo-provider.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">

<dubbo:application name="demo-provider"/>

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

<!-- <dubbo:registry address="multicast://224.5.6.7:1234"/> -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<dubbo:protocol name="dubbo" port="20880"/>

<!-- 向注册中心注册暴漏服务地址,注册服务 -->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"/>
<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/>

</beans>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.cn.ali.dubbo.provider</groupId>
<artifactId>com.cn.ali.dubbo.provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>com.cn.ali.dubbo.provider</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.7</version>
</dependency>

</dependencies>
</project>

启动后,可以在dubbo admin-服务治理-服务,看到服务名称。
Dubbo 学习2 Dubbo-Admin及服务注册到Zookeeper_dubbo_04

消费者

Consumer

package com.alibaba.dubbo.demo;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Consumer {
public static void main(String[] args) throws Exception {
String s[] = System.getProperty("java.class.path").split(";");
for (String string : s) {
System.out.println(string);
}

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "dubbo-demo-consumer.xml" });
context.start();
DemoService demoService = (DemoService) context.getBean("demoService"); // obtain proxy object for remote invocation
String hello = demoService.sayHello("world"); // execute remote invocation
System.out.println(hello); // show the result
}
}

dubbo-demo-consumer.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">
<dubbo:application name="demo-consumer"/>
<!-- <dubbo:registry address="multicast://224.5.6.7:1234"/> -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 向注册中心订阅服务 -->
<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService"/>
</beans>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.cn.ali.dubbo.consumer</groupId>
<artifactId>com.cn.ali.dubbo.consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>com.cn.ali.dubbo.consumer</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.7</version>
</dependency>
</dependencies>
</project>

启动消费者,到dubbo-admin查看服务

三、问题处理

一个经常会遇到的问题,是dubbo的提供者ip 被注册为 127.0.0.1。 在dubbo-admin或进入zookeeper中可以看到提供者的信息。
处理方式是:

1. 看看主机名是不是 localhost.localdomain

如果是,则修改主机名。

hostnamectl
# 或 cat /etc/hostname
sudo hostnamectl set-hostname 要设置的主机名
hostnamectl

2. 在hosts里添加记录

运行dubbo服务提供者的ip    本机的主机名

3. 要检查消费的ip是不是也使用了自身的私有ip

如果是也修改hosts文件。


举报

相关推荐

0 条评论