springboot使用dubbo以及zookeeper

1.docker安装zookeeper

docker拉取镜像,默认lastest

docker pull zookeeper

启动zookeeper,只使用到了默认的2181端口,把它映射到主机的12181上

docker run --name zk01 -p 12181:2181 --restart always -d zookeeper

2.新建整合工程

1.新建一个springboot-dubbo的空工程,再在这个工程下面,按照dubbo分布式的要求,将生产者(provider-ticker)和消费者(consumer-user)分别建立工程。
在这里插入图片描述
2.生产者(provider-ticker)和消费者(consumer-user),pom.xml文件中导入dubbo和zookeeper的jar包,为了方便测试,加上web和test。

		<!-- dubbo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <!-- 引入zookeeper的依赖,和服务器上的zookeeper版本对应 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.9</version>
        </dependency>
        
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

3.provider

application.yml文件配置扫描路径和注册地址:

dubbo:
  application:
    name: provider-ticket
  registry:
    address: zookeeper://192.168.99.100:12181
  scan:
    base-packages: com.pc.providerticket.service

注意,这些配置我写在application.properties文件上面的时候,后面测试的时候发生了空指针异常,消费者没能调用到生产者提供的方法,但是写在application.yml文件中就没问题,很奇怪。

新建service包和TicketService接口:

package com.pc.providerticket.service

public interface TicketService {
    public String getTicket();
}

新建其实现类:

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

@Component
@Service
public class TicketServiceImpl implements TicketService {

    @Override
    public String getTicket(){
        return "《海上钢琴师》";
    }

}

记得打上标签,其中@Service是dubbo中的标签,不要搞错。

在Application中使用@EnableDubbo,启用dubbo:

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 1.注册服务提供者
 *  1、引入dubbo和zkclient依赖
 *  2、配置dubbo扫描路径和注册中心地址
 *  3、使用@Service发布服务
 */
@EnableDubbo
@SpringBootApplication
public class ProviderTicketApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderTicketApplication.class, args);
    }

}

启动provider-ticker

4.consumer

application.yml的配置,指定了zookeeper的注册地址:

dubbo:
  application:
    name: consumer-user
  registry:
    address: zookeeper://192.168.99.100:12181

在consumer-user项目中建路径和provider-ticker中TicketService一样的接口:

package com.pc.providerticket.service;

public interface TicketService {
    public String getTicket();
}

效果是TicketService所在包和项目新建时自动生成的consumeruser同级:

在consumeruser下建service包和ConsumerService:

import com.alibaba.dubbo.config.annotation.Reference;
import com.pc.providerticket.service.TicketService;
import org.springframework.stereotype.Service;

@Service
public class ConsumerService {

    @Reference
    TicketService ticketService;

    public void hello(){
        String ticket = ticketService.getTicket();
        System.out.println("买到"+ticket+"的票了");
    }
}

这里面的@Service标签是springboot的标签了,ticketService上面的@Reference标签是dubbo的标签。

在Application类中使用@EnableDubbo,启用dubbo:

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubbo
@SpringBootApplication
public class ConsumerUserApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerUserApplication.class, args);
    }

}

5.测试

可以使用web去访问,这里就偷懒直接在test里面做了:

import com.pc.consumeruser.service.ConsumerService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ConsumerUserApplicationTests {

    @Autowired
    ConsumerService consumerService;

    @Test
    public void contextLoads() {
        consumerService.hello();
    }

}

运行测试方法,在控制台看到“买到《海上钢琴师》的票了”,就表示成功喽!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值