ESB(Enterprise Service Bus)的框架实现企业应用

ESB(Enterprise Service Bus,即企业服务总线) SB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口。通过使用ESB,可以在几乎不更改代码的情况下,以一种无缝的非侵入方式使企业已有的系统具有全新的服务接口,并能够在部署环境中支持任何标准。这在开源ESB中是非常少见的。 阅读详情

          微软公司最近提供一套用于帮助企业实现ESB(Enterprise Service Bus)的框架,这套ESB框架是基于BizTalk Server的,ESB不是微软公司的专利,许多大公司例如IBM 都有自己的ESB产品,当一个企业发展到了一定规模的时候,会有很多套成熟的软件共同来支撑企业的运营,所以当一个企业的信息化建设过程,必定会需要对多个业务系统进行整合,统一管理,统一协调。同时微软公司已经成功的发布了WCF ,这样企业集成中的安全性得以解决,这也意味着在进行企业EAI的时候可以通过把各个子系统发布成WCF 的EndPoint,通过ESB框架整合起来。
       Microsoft ESB Guidance 利用BizTalk Server 强大功能去支持松耦合的消息架构,Microsoft ESB Guidance正是利用了BizTalk Server这些特性去实现企业的ESB ,BizTalk Server 支持强大发布订阅功能,也就是说Microsoft ESB Guidance是以BizTalk Server 为消息总线,所有的消息经过经过订阅者发送到BizTalk Server 的消息数据库中,然后处理转发给其他的订阅者,每个订阅者可以通过WCF 技术暴露出很多个不同端口的EndPoint。这样所有的服务都是独立的无序性的,并且是解耦的 

        微软通过一些列的产品Windows Server 2003, the .NET Framework 3.0, and BizTalk Server 2006作为对企业实现ESB的支撑,Microsoft ESB Guidance是基于BizTalk Server 2006一组应用,它提供以下公用的ESB组件:

·         Message routing (消息路由)

·         Message validation (消息验证)

·         Message transformation (消息转换)

·         Centralized exception management(集中的异常管理)

·         Extensible adapter framework(可扩展的适配器框架)

·         Service orchestration(服务的编制支持)

·         Business rules engine(业务规则引擎)

·         Business activity monitoring(业务活动监视)

        以我自己的异常处理经验,我通常会在UI事件处理函数或线程启动函数中截获所有的异常,然后对截获的异常作特定的处理--很多情况下,是显示一个错误信息给用户,或记录异常日志!在这“很多情况下”,我都需要做相同的工作,首先是用try...catch把UI事件处理函数或线程启动函数中的所有代码围起来,然后,可能就是MessageBox.Show(ex.Message)或其它的处理。
    大家已经想到了,这类事情正好可以使用AOP来完成。本文将在前文介绍的EsbAOP的基础上来开发一个异常关闭器方面--ExceptionCloseerAspect,该方面修饰UI操作或修饰background线程的启动函数,用于控制是否拦截被修饰的方法抛出的异常,如果拦截,则对异常进行用户自定义处理,然后关闭该异常。
    关于ExceptionCloseerAspect要注意以下几个方面:
    (1)在UI操作时或后台线程中,经常其中会访问数据库或网络,为了截获这些异常,需要在每个UI的事件处理函数中写try...catch, 如果使用ExceptionCloseerAspect,则就不用在写try-catch了,ExceptionCloseerAspect会自动帮我们把异常截获,然后关闭它。
   (2)ExceptionCloseerAspect通常用于系统结构的最上层,比如UI层、或background线程的启动函数处。而且正好这些函数的返回值为void。
   (3)用户可以通过实现IExceptionHandler自定义异常处理方案,比如记录异常日志、弹出消息框通知使用者等。
   (4)注意,一般UI从Form继承,所以无法再从ContextBoundObject继承,也就无法对其使用Aspect,所以需要把最上层的逻辑封装在一个单独的类中==》而这有助于UI与逻辑的分离!

    从前面的分析已经看到,线程有两种类型,一是主线程(通常为UI线程),一是后台线程,对于不同线程抛出的异常,用户可能需要作不同的处理,所以,我们使用枚举来定义线程类型:
    /// <summary>
    /// ExceptionCloseType 异常发生所在线程的类型
    /// </summary>
    public enum ExceptionHostType
    {
        NotSetted ,UIThread ,BackGroundThread
    }   
    而为了使用户有机会处理抛出的异常,我们提供了IExceptionHandler接口:
    /// <summary>
    /// IExceptionHandler 在关闭异常之前,用户可以通过自定义的IExceptionHandler来处理异常,比如记录为日志或显示错误信息给用户
    /// </summary>
    public interface IExceptionHandler
    {
        void HandleException(Exception ee ,ExceptionHostType hostType) ;
    }
    在这些基础之上,我们就可以来实现ExceptionCloseerAspect了。从前文可以知道,ExceptionCloseerAspect只需要实现IAspect接口就可以了。现在给出其实现:
public class ExceptionCloseerAspect :IAspect
    {
        public ExceptionCloseerAspect()
        {           
        }

        #region IAspect 成员
        public void PreProcess(IMethodCallMessage requestMsg, object aspectClassArgument, object aspectMethodArgument)
        {
           
        }

        public void PostProcess(IMethodCallMessage requestMsg, ref IMethodReturnMessage respond, object aspectClassArgument, object aspectMethodArgument)
        {           
            if(respond.Exception == null)
            {
                return ;
            }

            Type HandlerType = (Type)aspectClassArgument ;
            Type destType    = typeof(IExceptionHandler) ;
            if(! destType.IsAssignableFrom(HandlerType))
            {
                return ;
            }

            IExceptionHandler exceptionHandler = (IExceptionHandler)Activator.CreateInstance(HandlerType) ;
            if(aspectMethodArgument != null)
            {
                exceptionHandler.HandleException(respond.Exception ,(ExceptionHostType)aspectMethodArgument) ;
            }
            else
            {
                exceptionHandler.HandleException(respond.Exception ,ExceptionHostType.NotSetted) ;
            }

            //修改返回结果,关闭异常
            respond = new ReturnMessage(null ,requestMsg) ;
        }

        #endregion
    }

    上面的实现有几点需要说明:
(1)ExceptionCloseerAspect的aspectClassArgument是实现了IExceptionHandler接口的类型
(2)ExceptionCloseerAspect的aspectMethodArgument是ExceptionHostType枚举值之一。
(3)注意PostProcess方法实现的最后一句,是AOP修改了方法调用的结果,从而关闭了异常。

    在实现了异常关闭器之后,我们就可以来小试牛刀了。首先,我们需要实现IAspectProcessorWrap接口来把ExceptionCloseerAspect所需要的资源反应出来:

public class ExceptionClosserWrap :IAspectProcessorWrap
    {
        #region IAspectProcessorWrap 成员

        public Type AspectProcessorType
        {
            get
            {               
                return typeof(ExceptionCloseerAspect);
            }
        }

        public object AspectClassArgument
        {
            get
            {
                return typeof(ExceptionHandler) ;
            }
        }

        public EnterpriseServerBase.Aop.MultiAspect.AspectSwitcherState DefaultAspectSwitcherState
        {
            get
            {               
                return AspectSwitcherState.On;
            }
        }

        #endregion
    }

    我们还需要实现IExceptionHandler来处理异常:

public class ExceptionHandler :IExceptionHandler
    {
        #region IExceptionHandler 成员

        public void HandleException(Exception ee, ExceptionHostType hostType)
        {
            if(hostType == ExceptionHostType.UIThread)
            {
                MessageBox.Show(ee.Message + "UI Thread !") ;
            }

            if(hostType == ExceptionHostType.NotSetted)
            {
                MessageBox.Show(ee.Message + " host thread not setted !") ;
            }

            if(hostType == ExceptionHostType.BackGroundThread)
            {
                MessageBox.Show(ee.Message + " background thread !") ;
            }
        }

        #endregion

    }
    前面的代码很容易明白,异常处理只是将异常信息显示给用户。现在来看看如何使用ExceptionCloseerAspect。需要再次强调的是,ExceptionCloseerAspect通常作用于UI事件处理函数或线程启动函数。我们已一个UI事件处理函数作为例子,首先要保证UI与业务逻辑分离,所以,我将业务逻辑封装在MyBusiness类中:

    [Aspect(typeof(ExceptionClosserWrap))]
    public class MyBusiness :ContextBoundObject
    {
        [AspectSwitcher(typeof(ExceptionClosserWrap) ,true ,ExceptionHostType.UIThread)]
        public void OnButton1Click()
        {
            throw new Exception("sky test exception !") ;
        }

        [AspectSwitcher(typeof(ExceptionClosserWrap) ,true)]
        public void OnButton2Click()
        {
            throw new Exception("sky2 test exception !") ;
        }

        [AspectSwitcher(typeof(ExceptionClosserWrap) ,true ,ExceptionHostType.BackGroundThread)]
        public void SkyThread()
        {
            throw new Exception("backGround thread exception !") ;
        }
    }
     而在所有的UI事件处理函数中,都将调用MyBusiness对应的方法,如:


private void button1_Click(object sender, System.EventArgs e)
        {
            this.myBusiness.OnButton1Click() ;
        }

        private void button2_Click(object sender, System.EventArgs e)
        {
            this.myBusiness.OnButton2Click() ;
        }

        private void button3_Click(object sender, System.EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(this.myBusiness.SkyThread)) ;
            thread.Start() ;
        }

 

———————————————————————
任何美好的事物只有触动了人们的心灵才变的美好;
孤独的时候看看天空里的雨,其实流泪的不只是你。

———————————————————————
 

什么是 ESB(企业服务总线) Enterprise Service Bus programming 企业服务总线(ESB)是面向服务架构(SOA)的核心组件,通过集中式管理实现应用程序间的集成。ESB提供消息路由、协议转换、数据模型转换等功能,将集成逻辑封装为可重用服务接口,降低系统间的耦合度。虽然ESB能简化企业集成、提高开发效率,但也存在集中化瓶颈、维护成本高和扩展性挑战等问题。IBM、AWS等厂商提供了ESB解决方案,但随着微服务架构兴起,轻量级集成模式逐渐成为替代选择。 阅读详情

相关推荐

企业服务总线(Enterprise Service Bus,ESB)与salesforce大数据联动

 如何选择ESB 什么是ESB 企业服务总线(Enterprise Service Bus,ESB)的概念是从面向服务体系架构(Service Oriented Architecture, SOA)发展而来的。SOA描述了一种IT基础设施的应用集成模型;其中的软构件集是以一种定义清晰的层次化结构相互耦合。一个ESB是一个预先组装的SOA实现,它包含了实现SOA分层目标所必需的

kong_kong_er的专栏 4970

企业服务总线(ESB)是什么

企业服务总线(Enterprise Service Bus,简称ESB)是一种中间件技术,它在分布式环境中的不同应用程序之间提供通信和数据集成的框架。ESB通过这些功能,使得企业能够更加灵活和高效地管理其IT架构,提高业务流程的自动化水平,促进不同系统和应用程序之间的协同工作。服务管理和监控:ESB提供服务配置管理和实时监控工具,帮助企业监控和管理其IT系统和服务。服务的封装和重用:ESB支持服务的封装,允许将业务逻辑封装成服务,便于重用和服务组合。

kaizhou900的博客 2053

企业服务总线(Enterprise Service Bus,ESB)简介

它提供了一个灵活的基础设施,用于连接、路由和中介不同服务之间的消息,从而实现服务的解耦、复用和灵活组合。定制开发可以提供更大的灵活性,但需要投入更多的人力和时间资源,并且需要自行负责后续的维护和升级工作。这些系统可能是在不同的时间点由不同的团队使用不同的技术栈开发的。在这个例子中,ESB充当了各个系统之间的“交通枢纽”,简化了系统间的集成和交互复杂性,提高了业务流程的灵活性和可扩展性。企业服务总线(ESB)的实现方式可以是选择专门的产品,也可以是定制开发,具体取决于企业的具体需求和现有技术架构。

程序猿视角 1884

Mule介绍

Mule介绍 什么是Mule Mule是一个基于Java的轻量级消息框架,它可以使我们快速、容易地将我们的应用连接起来,并且保证这些应用间可以交换数据。Mule使用了面向服务架构(SOA),提供了对现有系统的简洁的集成方式。不管应用程序采用了什么技术,JMS、Web Service、JDBC、HTTP甚至其他的技术,Mule都可以准确无误地将它们集成到一起。 Mule框架具有很强的可扩展性,

yujian461852002的专栏 2912

ESB开源系统mule

开源ESB框架 Mule 2增加了基于Schema的spring xml配置,用于集成传统的web应用。表达式赋值被内建在运行时的消息传递中,因此头信息,Xquery或是其他的测试可以很容易的完成,不需要新建POJO或是这些活动转换器。

Android HDMI-CEC协议解析:从机顶盒到电视的无缝遥控联动

本文深入解析Android HDMI-CEC协议,实现机顶盒与电视间的无缝遥控联动。通过剖析设备角色、消息格式及核心操作码,并结合Android HdmiControlManager API实战,详细讲解如何实现电源同步、按键穿透及音量控制,最终解决多设备遥控繁琐的痛点,提升用户体验。

egg99的博客 975

渗透测试——漏洞扫描工具

然后还要将all这个压缩包里的plugin_feed_info.inc提取出来,命令行是 tar -zxvf all-2.0.tar.gz plugin_feed_info.inc,然鹅,我提取不出来。将下载好的插件移动到Nessus目录下,然后输入sudo /opt/nessus/sbin/nessuscli update all-2.0.tar.gz。用户名和密码随便写写就好,随后将会更新补丁,OK,这样Nessus可以使用了。将会获得一串数字,然后去激活码的这个网站,输入自己的邮箱获取激活码。

wuli1024的博客 5011

IAP板卡远程升级(串口网口都可)+Ymodem+AES对bin文件加密+pc软件+板卡相互烧录

还是决定记录一下,毕竟这个东西我也搞了挺久的,遇到一些棘手的,或者是因为我很粗心遇到的问题也和大家分享一下,。 板卡核心是 STM32F103RCT6,256kflash 前言 开始看这个远程升级的时候,我是一头雾水的,原子哥的教程里面也有说到过iap,有了一个大概的了解,我想不明白的是,通过串口下载的方式把hex文件下载到flash,和把bin文件下载到flash难道不是拉一根线,下载一个文件嘛,(初入职场的我并没有考虑到安全这个问题)如果直接将hex文件给到客户那边,风险是非常大...

那可真是太开心了的博客 5371

什么是ESB架构?

本文主要是对ESB的总结,下面我将从以下几点去理清ESB相关知识点。 什么是ESB ESB解决了什么问题以及什么是HSB ESB产品有哪些?如何选择 如何实现ESB的各个功能 ESB与微服务的区别 一、什么是ESB ESB是Enterprise Service Bus的简称,中文翻译为企业服务总线,企业服务总线是一个实现系统间集成和互联互通的重要技术架构,可以理解为是一种消息和服务集成的中间件平台。 二、ESB解决了什么问题以及什么是HSB 图片摘自网络,侵删 ESB主要是为了解决多个

_ 2万+

华为OD新系统机试真题 - 失灵的键盘(C/C++/Py/Java/Js/Go)

华为OD新系统机试真题 【失灵的键盘】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD4月15号机试真题【失灵的键盘】

qq_45776114的博客 1073

Lammps实现结冰匀相成核

Lammps实现结冰匀相成核

Rockyoung 3849

ESB介绍

ESB 简单讲解

weixin_44655733的博客 6199

ubuntu-emto-cpa 测试和使用(单核运行)

ubuntu-emto-cpa 测试和使用(单核运行)

qq_45834835的博客 1403

使用ESB实现企业应用持续集成

在文章《Evolutionary integration with ESBs》原文地址( http://www.infoq.com/articles/Evolutionary-integration;jsessionid=343FB1F9A91896EF664974C580B0B34D) 作者以一个具体的应用阐述的了ESB给企业应用集成带来的作用。作者首先给出了一个案例:Kjetil 和 Ru

软件开发资料汇总 181

芯擎SEC1000芯片参数详细介绍

随着龙鹰一号的不断进化和应用,未来的智能座舱将不仅仅是显示和控制的集成,更是人与车之间的一种默契和无缝交互的体现。在汽车行业迈向智能化和电动化的浪潮中,座舱已不仅仅是一个驾驶者的操作空间,而是逐渐演变为一个集娱乐、信息、控制于一体的智能交互平台。今天的汽车不仅需要强劲的动力和炫酷的外观,更需要一颗强大而智能的“心脏”来支撑复杂的座舱体验和安全驾驶需求。想象一下,未来的汽车不再仅仅是交通工具,它将成为你的移动私人管家,了解你的习惯,甚至提前预测你的需求。让我们一起走进龙鹰一号的世界,探索智能座舱的无限可能!

weixin_43199439的博客 1725

ESP32-C3模组上跑通HTTPS分次传输文件(1)

ESP32-C3模组上跑通HTTPS分次传输文件(1)

phmatthaus的专栏 761

ESB(企业服务总线,Enterprise Service Bus)是什么?

ESB(企业服务总线,Enterprise Service Bus)是什么?

weixin_45428910的博客 1346

基于C++和Basler SDK的相机开发详解

Basler相机是德国Basler公司生产的高性能工业相机,具有高分辨率、高帧率和低噪声的特点。Basler相机广泛应用于机器视觉、工业自动化、医疗影像和安防监控等领域。高分辨率和高帧率:能够捕捉清晰、细腻的图像。多种接口:支持USB、GigE、Camera Link等多种接口,方便不同应用场景的需求。丰富的配置选项:支持多种图像格式、分辨率和帧率的配置,适应不同的应用需求。本文详细介绍了如何基于C++和Basler SDK进行相机开发,涵盖了从环境搭建、相机连接、图像采集到图像处理的完整过程。

qq_38334677的博客 2100
上一篇: 如何在VS2008中的Language Integrated Query动态条件查询
下一篇: 开发Office Communicator 2007 在企业里的扩展应用
Developernet
博客等级 码龄22年 324粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值