项目使用Dubbo实现解耦和

什么是Dubbo?Dubbo在项目中怎么使用? 提供了SOA服务治理方案;它的架构主要有五个角色/核心组件,分为是Container(容器)、Provider(服务的提供方)、Registry(注册中心)、Consumer(服务的消费方)、Monitor(监控中心)。容器主要负责启动、加载、运行服务提供者;同时服务提供者在启动时,向注册中心注册自己提供的服务;消费者向注册中心订阅自己的服务;注册中心返回服务提供者列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者;... 阅读详情

代码准备

本次作者建立了一个小Demo来说明如何使用Dubbo实现解耦和的项目部署方式
作者使用的开发工具是idea,大家也可以使用eclipse或者myeclipse.
首先使用idea创建一个maven项目,
这里写图片描述
其中包括了5个子模块,分别是
- dao
- daoimpl
- service
- serviceimpl
- web
项目结构如下图,请原谅画的比较…..(额..抽象)
这里写图片描述
最上面是dubbodemo的项目,旗下分为5个子模块.
他们的依赖关系分别如图所示
- daoimpl→dao
- serviceimpl→service
- serviceimpl→dao
- web→service

具体需要的jar包pom文件如下

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <properties>
        <spring.version>4.3.9.RELEASE</spring.version> <!--自己写的 -->
        <jedis.version>2.9.0</jedis.version>
        <dubbo.version>2.5.5</dubbo.version>
        <junit.version>4.12</junit.version>
        <jackson.version>2.9.1</jackson.version>
    </properties>

    <groupId>com.dsj</groupId>
    <artifactId>dubbodemo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>dao</module>
        <module>daoimpl</module>
        <module>service</module>
        <module>serviceimpl</module>
        <module>web</module>
    </modules>
    <packaging>pom</packaging>

    <dependencyManagement>
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>${jedis.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/junit/junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

</project>

Dao

首先我们来编写一下dao,比如用户使用dao提供的服务

public interface UserDao {
    int add(int i,int n);
}

显而易见,我们的dao只提供了一个add,下面编写daoimpl

DaoImpl

注:所有的模块均使用maven,包括打包
接下来是daoimpl的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>dubbodemo</artifactId>
        <groupId>com.dsj</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dao-impl</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.dsj</groupId>
            <artifactId>dao</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>                    <classesDirectory>target/classes/</classesDirectory>
                    <archive>
                        <manifest>
                            <mainClass>com.alibaba.dubbo.container.Main</mainClass>
                            <!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
                            <useUniqueVersions>false</useUniqueVersions>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <type>jar</type>
                            <includeTypes>jar</includeTypes>
                            <!--<useUniqueVersions>false</useUniqueVersions>-->
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <targetPath>${project.build.directory}/classes</targetPath>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <!-- 结合com.alibaba.dubbo.container.Main -->
            <resource>
                <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>spring-dao-impl.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

</project>

以及Spring的配置文件

<?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:context="http://www.springframework.org/schema/context"
       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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<context:component-scan base-package="com.dsj"/>
    <!-- 开启类中dubbo的注解能力,第一个例子中没用 -->
    <!--<dubbo:annotation></dubbo:annotation>-->
    <dubbo:application name="dsj-dao"/>
    <dubbo:registry protocol="redis" address="192.168.201.113:6379" />
    <bean id="userDao" class="com.dsj.dao.UserDaoImpl"/>
    <dubbo:service interface="com.dsj.dao.UserDao" ref="userDao"/>

</beans>

接下来是dao的实现类daoimpl,被调用之后会在控制台打印使用dubbo提供加法服务

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

/**
 * Created by Administrator on 2017/9/20 0020.
 */
@Repository
@Service
public class UserDaoImpl implements UserDao{
    public int add(int i, int n) {
        System.out.println("使用dubbo提供加法服务");
        return i+n;
    }
}

同时 写一个运行时的类运行jar包时候自动执行该类的main方法

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * Created by Administrator on 2017/9/24 0024.
 */
public class RunJar {
    public static void main(String[] args) throws IOException {
        if (args.length==0){
            System.err.println("Useage:java jar dao.1.0-SNAPSHOT.jar spring-dao-impl.xml");
        }else {
            ApplicationContext ac=new ClassPathXmlApplicationContext("args[0]");
            System.out.println("服务已启动,按回车停止");
            System.in.read();
        }
    }
}

ServiceImpl

接下来service不做过多的赘述和dao相同
serviceimpl中的spring-service-impl.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"
       xmlns:context="http://www.springframework.org/schema/context"
       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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.dsj"/>
    <dubbo:application name="dsj-service"/>
    <dubbo:registry protocol="redis" address="192.168.201.113:6379" />
    <dubbo:reference id="userDao" interface="com.dsj.dao.UserDao"/>
    <dubbo:protocol name="dubbo" port="20888"/>
    <bean id="userService" class="com.dsj.service.UserServiceImpl">
        <property name="userDao" ref="userDao"/>
    </bean>
    <dubbo:service  interface="com.dsj.service.UserService" ref="userService"/>
</beans>

以及pom文件中的设置

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>dubbodemo</artifactId>
        <groupId>com.dsj</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service-impl</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.dsj</groupId>
            <artifactId>service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.dsj</groupId>
            <artifactId>dao</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.dsj</groupId>
            <artifactId>dao</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <classesDirectory>target/classes/</classesDirectory>
                    <archive>
                        <manifest>
                            <mainClass>com.alibaba.dubbo.container.Main</mainClass>
                            <!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
                            <useUniqueVersions>false</useUniqueVersions>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <type>jar</type>
                            <includeTypes>jar</includeTypes>
                            <!--<useUniqueVersions>false</useUniqueVersions>-->
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <targetPath>${project.build.directory}/classes</targetPath>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <!-- 结合com.alibaba.dubbo.container.Main -->
            <resource>
                <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>spring-service-impl.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

当然少不了运行时的main方法

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by Administrator on 2017/9/24 0024.
 */
public class RunJar {
    public static void main(String[] args) {
        ApplicationContext ac=new ClassPathXmlApplicationContext("spring-service-impl.xml");
        UserService us=ac.getBean(UserService.class);
        us.add(5,6);
    }
}

还有serviceimp

import com.dsj.dao.UserDao;

/**
 * Created by Administrator on 2017/9/20 0020.
 */
public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public int add(int i, int n) {
        System.out.println(String.format("开始计算%d+%d的结果,等待dubbo服务响应",i,n));
        int sum=userDao.add(i,n);
        System.out.println(sum);
        return sum;
    }
}

Web

最后一个模块web模块
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>dubbodemo</artifactId>
        <groupId>com.dsj</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>web</artifactId>
    <packaging>war</packaging>
    <dependencies>
        <dependency>
            <groupId>com.dsj</groupId>
            <artifactId>service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
    </dependencies>
</project>

spring-webmvc.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" 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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<context:component-scan base-package="com.dsj"/> <!--扫描包 mvc以外注解-->
    <mvc:annotation-driven/>    <!--mvc的注解-->
    <mvc:default-servlet-handler/>      <!--请求mvc以外的东西(html)能被访问-->
    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
    <dubbo:annotation/>
    <dubbo:application name="dsj-web"/>
    <dubbo:registry protocol="redis" address="192.168.201.113:6379" />
    <dubbo:reference interface ="com.dsj.service.UserService" id ="userService"/>

</beans>

UserController

package com.dsj.controller;

import com.dsj.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by Administrator on 2017/9/24 0024.
 */
@Controller
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserService userService;

    @RequestMapping("/add")
    @ResponseBody
    public Map add(Integer i, Integer n) {
        Map data = new HashMap();
        int sum = userService.add(i, n);
        data.put("result", sum);
        return data;


    }
}

webapp/WEB-INF下的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>spring-webmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-webmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-webmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

以及一个非常简单的页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/jquery-1.10.2.min.js"></script>
    <script>
        $(function () {
            $('button').click(function () {
                var num1=$('#num1').val();
                var num2=$('#num2').val();
                $.get("add",{"i":num1,"n":num2},function (data) {
                    $('#rs').val(data.result);
                })
            })
        })
    </script>
</head>
<body>
<input type="number" id="num1">+<input type="number" id="num2"><button>=</button><input type="number" id="rs">
</body>
</html>

项目结构如下
这里写图片描述

项目部署

首先使用idea的工具
这里写图片描述
将 daoimpl serviceimpl web 三个模块分别进行打包
除了web是war包意外 前两个均为jar包 我们的maven配置方式可以直接运行打包好的jar
接下来在磁盘上找到打包好的jar包
这里写图片描述
打开一个终端执行

java -jar dao-xxx.jar

serviceimpl同上
注意运行的顺序,第一个是daoimpl 然后serviceimpl 最后是tomcat
将web打包好的war包放在tomcat的webapp下 改名为ROOT如果之前使用过tomcat需要先将ROOT文件夹删除
就像这样
这里写图片描述
接下来运行tomcat的启动脚本
作者是在windows环境下运行所以启动的是bin目录下的startup.bat
其实这三个部分可以分别放在三台不同的主机上,也就是真正实现了代码的解耦
最后部署结构如下
这里写图片描述

手把手教你用DCA1000EVM解析IWR6843毫米波雷达数据(附MATLAB代码) 本文提供了一份详尽的实战指南,手把手教你使用DCA1000EVM采集并解析TI毫米波雷达IWR6843的原始数据。内容涵盖硬件连接配置、mmWave Studio参数设置、LVDS数据流结构解析,并附有核心MATLAB代码,详细演示了从原始二进制文件到距离-速度谱的信号处理全链路,帮助开发者快速掌握数据解析与处理的关键步骤。 阅读详情

相关推荐

ROS2机械臂MPC轨迹规划实战:从MoveIt 2插件配置到参数调优全流程

本文详细介绍了ROS2机械臂MPC轨迹规划的全流程,从MoveIt 2插件配置到参数调优。通过模型预测控制(MPC)技术,实现高精度运动控制,特别适合复杂装配任务。文章包含环境搭建、插件部署、参数设计及实战调优方法,帮助开发者快速掌握ROS2机械臂的MPC轨迹规划技术。

i0j1k2l3m的博客 206

dubbo解耦service层和action层操作model属性问题

在开发中,采用SSM框架,通过dubbo将服务层和action层解耦。多人操作一个实体Model(子),刚好这个Model又继承另一个Model(父),一哥们在不知情的情况下,在子Model中定义了一个父Model已经存在的属性。查询后,发现这一字段的值为null,转化为json输出到前端页面时这一属性直接丢失了。通过debug发现,在service层查询后封装到Model时,数据是存在的,但是一...

iCheetor 1014

RT-Thread学习笔记(5):SPI驱动框架分析

1、两个设备模型 在spi驱框架中,一般会自己初始化一个总线设备(rt_spi_bus),当我们通过挂载后,会相应注册一个从设备(rt_spi_device)。 1、总线设备模型 struct rt_spi_bus { struct rt_device parent; rt_uint8_t mode; const struct rt_spi_ops *ops; struct rt_mutex lock; struct rt_spi_device *owner; };

BLBQ962464的博客 1万+

dubbo启动服务之容器(Container)

from http://www.ccblog.cn/75.htm 讲解dubbo启动服务的时候先来了解下java的spi机制 一:SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,而后,把新加的实现,描述给JDK知道就行啦(通过改一个文本文件即可) ,公司内部目前Dubbo框

fwdwqdwq的博客 779

STM32F103C8T6蓝莓派用HAL库GPIO模拟SPI驱动MAX31865读取PT100温度(附完整代码)

本文详细介绍了如何在STM32F103C8T6蓝莓派开发板上使用HAL库通过GPIO模拟SPI驱动MAX31865读取PT100温度传感器的完整方案。内容包括硬件连接、CubeMX配置、GPIO模拟SPI实现、温度计算算法及常见问题排查,并附有完整代码示例,帮助开发者快速实现高精度温度测量。

weixin_30684743的博客 937

Stata面板数据OLS回归分析实战指南

OLS回归作为计量经济学的核心分析方法,通过最小化残差平方和实现参数估计,广泛应用于经济学实证研究。其技术价值在于模型简洁、结果易于解释,特别适合处理面板数据中的复杂关系。在实际应用中,配合robust标准误能有效解决异方差问题,而固定效应模型则可控制个体特异性。本文以Stata软件为例,详细演示从数据导入、描述性统计到混合OLS和固定效应模型构建的全流程,重点解析面板数据特有的格式设定、模型选择标准以及结果呈现技巧,为经济学研究者提供可直接复用的分析框架。

weixin_29051811的博客 268

聊聊Dubbo(八):核心源码-容器启动/停止

1 介绍 服务容器是 一个 standalone 的启动程序,因为后台服务不需要 Tomcat 或 JBoss 等 Web 容器的功能,如果硬要用 Web 容器去加载服务提供方,增加复杂性,也浪费资源。 服务容器 只是一个简单的 Main 方法,并加载一个简单的 Spring 容器,用于暴露服务。 服务容器的加载内容可以扩展,内置了 spring, jetty, log4j, logback等...

weixin_34234823的博客 202

RAD Studio 10.4.2 安装避坑指南:从镜像加载到首次运行的全流程解析

本文提供了一份详尽的RAD Studio 10.4.2安装避坑指南,涵盖从镜像验证、文件提取到安装激活的全流程。重点解析了安装教程中常见的权限、路径及激活顺序等关键“坑点”,旨在帮助开发者,尤其是Delphi和C++Builder新手,一次性顺利完成安装与配置,确保开发环境稳定运行。

weixin_29224309的博客 328

dubbo 快速启动-结合spring注解使用com.alibaba.dubbo.container.Main启动

开始 是在之前的项目上 https://blog.youkuaiyun.com/ko0491/article/details/85168055 只更改Main类 之前的 现在的 public class Main3 { public static void main(String[] args) throws IOException { // com.alibaba.dubbo...

小城我家 1443

【Maxwell16.0】实战指南:从DXF导入到MotorCAD联合仿真的关键技巧

本文详细解析了Maxwell 16.0与MotorCAD进行联合仿真的核心流程与关键技巧。重点阐述了从DXF模型导入、几何修复、一极一槽模型剪裁,到坐标系对齐、MotorCAD参数匹配及结果验证的全过程,旨在帮助工程师高效打通联合仿真链路,规避常见错误,提升电机设计效率。

weixin_29062865的博客 715

GEE案例:计算区域生态总体脆弱性分析

计算区域生态总体脆弱性分析需要考虑多个指标和因素。下面是一个基本的方法:选择指标:选择一组能够反映区域生态系统脆弱性的指标。这些指标可以包括生物多样性指数、森林覆盖率、湿地保护率、土地退化程度等。为每个指标分配权重:为了使得各指标在计算中的重要性相对均衡,可以为每个指标分配一个权重。权重可以根据各指标的重要性和可利用的数据进行确定。数据收集和处理:收集每个指标的数据,并对其进行处理,确保数据的准确性和一致性。如果有需要,可以对数据进行归一化处理。计算指标值:根据收集的数据和权重,计算每个指标的值。

此星光明博客 466

java面试,什么是Dubbo?在项目中怎么用?都支持什么协议?

什么是Dubbo? Dubbo 是阿里开源的远程服务调用(RPC)的分布式框架,提供了 SOA 服务治理方案;它的架构主要有五个角色/核心组件,分为是 Container(容器)、Provider(服务的提供方)、Registry(注册中心)、Consumer(服务的消费方)、Monitor(监控中心)。 容器主要负责启动、加载、运行服务提供者; 同时服务提供者在启动时,向注册中心注册自己提供的服务; 消费者向注册中心订阅自己的服务; 注册中心返回服务提供者列表给消费者,如果有变更,注册中心将基于长连接推送

weixin_51689029的博客 142

无人机视觉锁定与目标跟踪技术深度解析(含完整代码)

本文介绍了无人机视觉锁定系统的核心技术实现,包括系统架构、目标检测与跟踪算法。系统采用YOLOv5进行初始目标检测,结合手动框选作为备选方案。在跟踪环节对比了KCF、CSRT等传统方法和SiamFC等深度学习算法,最终选用CSRT作为CPU平台最优方案。文章详细解析了相关滤波跟踪的数学原理,并提供了目标检测器和跟踪器的Python实现代码。该系统能有效处理目标遮挡、光照变化等挑战,为无人机自主跟踪提供了实用解决方案。

电脑管家 686

架构:第七章:基于Dubbo+Zookeeper项目架构

Dubbo: 简单的介绍一下Dubbo?(Dubbo是什么) dubbo就是个服务调用的东东。 为什么怎么说呢? 因为Dubbo是由阿里开源的一个RPC分布式框架 那么RPC是什么呢? 就是不同的应用部署到不同的服务器上,应用之间想要调用没有办法直接调用,因为不在一个内存空间,需要通过网络通讯来调用,或者传达调用的数据。而且RPC会将远程调用的细节隐藏起来,让调用远程服务像调用本地服务一样简单。 dubbo的架构有哪些? 主要有五个角色/核心组件,分为是Container(容器)、Provider(服务的提

weixin_44519496的博客 369

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

dubbo官方文档_最新官方版的SpringBoot 整合 Dubbo

本文作者:微笑面对生活上次的那个springboot和dubbo的整合版本中,dubbo的版本是2.5.3,它的Service注解和事务不能同时使用,会造成扫描失效,2.6.2的dubbo版本已经纠正了此不便,官方也给出了与springboot整合的quick start ,但是又缺少与zk的整合部分,所以我在这里只讲述在dubbo-spring-boot-starter依赖里,需要添加的zk依赖...

weixin_39766867的博客 485

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Dubbo--HelloWorld

上篇博客对Dubbo进行了大概的介绍,这篇博客介绍如何使用Dubbo,经典的HelloWorld。       通过上篇博客我们知道,在dubbo中有一个很重要的角色是注册中心,Dubbo现在支持的有三种方式:1.multicast;2.zookeeper;3.redis。下面的Demo使用的是multicast方式。 项目目录结构: 消费者: 服务者:   消费者端

康 4226

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

springboot 整合 Dubbo

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。 由于Dubbo 中需要使用到服务注册中心...

kxy646589789的博客 185

Dubbo|基础知识之SPI机制

SPI机制是Dubbo框架的基础知识,学习Dubbo框架之前有必要深入理解SPI机制。下面对SPI的概念,作用,使用以及原理作一个深入的介绍。 1.SPI是什么?SPI有什么用? SPI的全称是Service Provider Interface,可以翻译为“提供服务接口”;举一个实际场景:模块A提供一个Service接口,模块B和模块C分别实现该Service接口,那么模块A如何在无感知的情况下...

星空下的程序猿 515

dubbo:巧用dubbo的SPI机制实现各类定制功能(六)

SPI(Service Provider Interface),是一种服务发现机制,它允许服务提供者在运行时动态地为某个接口提供实现,而不需要在程序编译时进行硬编码。这种机制的核心思想是将装配的控制权移到程序之外,通过在模块化设计中实现接口与服务实现的解耦,从而提供一种插件化的扩展机制。SPI机制主要应用于框架和库的开发中,以支持服务的动态加载和替换。

55555的博客 2403

什么是Dubbo?Dubbo在项目中是怎么用的?

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!频、实战项目源码讲义》点击传送门即可获取!**

F1520080的博客 775

Dubbo使用详解

Dubbo是一个高性能、轻量级的开源Java RPC框架,由阿里巴巴公司开发并开源。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。高性能:Dubbo使用高效的网络框架和序列化框架,让分布式服务之间调用效率更高。透明化:Dubbo在调用远程的服务的时候再本地有一个接口,就像调用本地方法一样去调用,底层实现好参数传输和远程服务运行结果传回之后的返回。

技术人集结地 2536

Dubbo的特性及其项目的实现

1.RunDashBoard是一个项目的运行管理,使用它来管理项目的运行会更方便。序列化协议安全,即使用序列化在网络间的传输会安全;地址缓存,即消费者服务第一次调用生产者服务时,会将调用地址进行缓存,即使zookeeper注册中心挂了也不会影响调用这个生产者服务。超时时间和覆盖关系,即消费者服务在调用生产者服务时,可能会出现线程阻塞或者等待,还有高并发的情况;此时需要设置超时时间。覆盖关系,即消费者服务设置的超时时间的优先级比生产者服务设置的优先级高。zookeeper的工作流程。......

weixin_49076273的博客 872

【Dubbo三】SSM集成Dubbo+Zookeeper实现服务化

前言最近在做一个小项目,基于Maven构建,框架使用现在主流的:SpringMVC(4.1)+spring(4.1)+MyBatis(3.4.0),实现基本增删改查,页面国际化。数据源采用阿里开源的Druid,前端采用基于Bootstrap封装的模板AdminLTE(2.3.6)及Bootstrap的一些插件。上个周末刚好有时间,将项目进行拆分,集成Dubbo2.5.3+Zookeeper3.4.6

Jason 7714

深度解析dubbo扩展技术dubbo spi(注解)

注:本文dubbo源码版本v2.6.1 1.介绍 由于jdk自身提供的spi技术不满足dubbo框架的需要,dubbo在此基础上做了一定的改进和优化,同时又兼容jdk spi。正是基于dubbo spi加载机制,让整个框架的接口和具体的实现完全解耦,dubbo几乎所有的组件都是基于扩展机制来实现的,是整个框架良好扩展性的基础。它不仅屏蔽了jdk spi的一些短板,而且还增加了对扩展IOC与AOP的功能。在dubbo-common模块的com.alibaba.dubbo.common.extension包中就

猿上生活 7029

分享一些你在实际项目中使用Dubbo的经验和遇到的挑战?

当然,在使用Dubbo的过程中也遇到了一些挑战和问题,但通过不断的技术探索和实践积累,我们逐渐找到了解决这些问题的方法和策略。同时,我们也使用了Dubbo提供的熔断和降级机制,当某个服务出现问题时,可以自动切换到备用服务或返回默认值,避免了整个调用链的失败。同时,利用Dubbo的服务分组、路由和容错机制,我们实现了服务的灵活治理,确保了服务的稳定性和可用性。同时,根据服务的调用特点和压力情况,调整了线程池的大小和类型,确保了服务的处理能力和响应速度。在实际项目中,我们根据业务特点进行了针对性的性能优化。

wddblog的博客 807
上一篇: MapReducu操作HBase
下一篇: Spark组件介绍
C_FuL
博客等级 码龄10年 15粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值