`
keezzm
  • 浏览: 14561 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

ActiveMQ——消息队列基础篇

阅读更多

简介

ActiveMQ Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

特性

  1.  多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
  2.  完全支持JMS1.1J2EE 1.4规范 (持久化,XA消息,事务)
  3. Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
  4. 通过了常见J2EE服务器( Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
  5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  6. 支持通过JDBCjournal提供高速的消息持久化
  7. 从设计上保证了高性能的集群,客户端-服务器,点对点
  8. 支持Ajax
  9.  支持与Axis的整合
  10. 可以很容易得调用内嵌JMS provider,进行测试

JMS简介

     JMS源于企业应用对于消息中间件的需求,使应用程序可以通过消息进行异步处理而互不影响。Sun公司和它的合作伙伴设计的JMS API定义了一组公共的应用程序接口和相应语法,使得Java程序能够和其他消息组件进行通信。JMS有四个组成部分:JMS服务提供者、消息管理对象、消息的生产者消费者和消息本身。

JMS服务提供者

     JMS服务提供者实现消息队列和通知,同时实现消息管理的APIJMS已经是J2EE API的一部分,J2EE服务器都提供JMS服务。

消息管理对象

     消息管理对象提供对消息进行操作的APIJMS AP中有两个消息管理对象:创建jms连接使用的工厂(ConnectionFactory)和目的地(Destination),根据消息的消费方式的不同ConnectionFactory可以分为QueueConnectionFactoryTopicConnectionFactory,目的地(Destination)可以分为队列(Queue)和主题(Topic)两种。

消息的生产者消费者

     消息的产生由JMS的客户端完成,JMS服务提供者负责管理这些消息,消息的消费者可以接收消息。消息的生产者可以分为――点对点消息发布者(P2P)和主题消息发布者(TopicPublisher)。所以,消息的消费者分为两类:主题消息的订阅者(TopicSubscriber)和点对点消息的接收者(queue receiver)。

JMS消息

     息是服务提供者和客户端之间传递信息所使用的信息单元。JMS消息由以下三部分组成:消息头(header)、属性(property)和消息体(body)。

消息标头

消息标头是消息的信封,包含为使消息到达目的地所需要的所有信息,可以直接控制其

中一些字段的值,其它值则由JMS提供程序填写。

JMS消息头包含了许多字段,它们是消息发送后由JMS提供者或消息发送者产生,用来表

示消息、设置优先权和失效时间等等,并且为消息确定路由。

 

JMSDestination Send方法设置。指定消息的目的地,由JMS提供程序填写

JMSDeliveryMode Send方法设置。提交消息的模式-持续或非持续。发送消息后JMS提供程序填写该字段。

JMSMessageID Send方法设置。包含消息的唯一标识符。发送过程中由JMS提供程序填写

JMSTimeStamp Send 方法设置。记录消息被传递给send方法的时间。发送过程中由JMS提供程序填写

JMSCorrelationID 由客户端设置。包含用于将消息连接在一起的ID。客户端一般将其置为所引用消息的ID

JMSReplyTo 由客户端设置。响应消息的目的地,如果客户端期望得到响应消息,则填写该字段

JMSRedelivered JMS提供程序设置。指出该消息先前被发送过

JMSType 由客户端设置。包含由客户端提供的消息类型标识符。是否需要该字段,不同的提供程序有不同要求

JMSExpiration Send 方法设置。一个根据客户端提供的年龄计算出来的值,如果GMT比该过期值晚,则销毁消息

JMSPriority Send 方法设置。包含客户端在发送消息时所设置有限级值

消息属性

消息属性,用来添加删除消息头以外的附加信息。除了上面的属性,还可以自定义属

性,以便进行消息的选择

一般通过setXXXProperty方法来定义消息属性,XXX取值为:BooleanByte

DoubleFloatIntLongObjectShortString

每一属性均由字符串名字和相关的值组成 ,例如:

TextMessage msg = tsession.createTextMessage();

msg.setStringProperty(“CUSTOMER_NAME”,”MyCustomer”);

String customer = msg.getStringProperty(“CUSTOMER_NAME”);

其中的”CUSTOMER_NAME””MyCustomer”就是消息当中对应的keyvalue

消息主体

消息主体包含了消息的核心数据。

JMS 定义了5中消息类型: TextMessageMapMessageBytesMessage

StreamMessageObjectMessage

选择最合适的消息类型可以使JMS最有效 的处理消息。

 

  • TextMessage(文本消息)

将数据作为简单字符串存放在主体中(XML就可以作为字符串发)

TextMessage msg = session.createTextMessage();

msg.setText(text);

有些厂商支持一种XML专用的消息格式,带来了便利,但是不是标准的JMS类型,影响

移植性。

只自己定义了两个方法setText(String s)getText()

 

  • MapMessage(映射消息)

使用一张映射表来存放其主体内容(参照Jms API

MapMessage msg = session.createMapMessage();

msg.setString(“CUSTOMER_NAME”,”John”);

msg.setInt(“CUSTOMER_AGE”,12);

String s = msg.getString(“CUSTOMER_NAME”);

int age = msg.getInt(“CUSTOMER_AGE”);

 

  • BytesMessage(字节消息)

将字节流存放在消息主体中。适合于下列情况:必须压缩发送的大量数据、需要与现有

消息格式保持一致等(参照Jms API

byte[] data;

BytesMessage msg = session.createBytesMessage();

msg.wirte(data);

byte[] msgData = new byte[256];

int bytesRead = msg.readBytes(msgData);

 

  •  StreamMessage(流消息)

用于处理原语类型。这里也支持属性字段和MapMessage所支持的数据类型。使用这种

消息格式时,收发双方事先协商好字段的顺序,以保证写读顺序相同(参照Jms API

StringMessage msg = session.createStreamMessage();

msg.writeString(“John”);

msg.writeInt(12);

String s = msg.readString();

Int age = msg.readInt();

PS:个人认为有点像socket的信息收发)

 

  •  ObjectMessage(对象消息)

用于往消息中写入可序列化的对象。

消息中可以存放一个对象,如果要存放多个对象,需要建立一个对象集合,然后把这个

集合写入消息。

客户端接收到一个ObjectMessage时,是read-only模式。如果一个客户端试图写

message,将会抛出MessageNotWriteableException。如果调用了clearBody方法,message既可以读又可以写

自己只单独定义了两个方法:getObject()setObject(Serializable s)

ObjectMessage包含的只是object的一个快照,set之后object的修改对ObjectMessagebody无效 (从两个方法可以看出,这种消息已经强制要你实现java.io. Serializable接口)

Message只读时被set抛出MessageNotWriteableException;

setget时,如果对象序列化失败抛出MessageFormatException

消息的通信方式(点对点通信和发布/订阅方式)

点对点方式(point-to-point

点对点的消息发送方式主要建立在 Message QueueSenderReceiver上,

Message Queue 存贮消息,Sender 发送消息,Receiver接收消息.具体点就是Sender Client发送Message Queue , Receiver ClientQueue中接收消息和"发送消息已接受"Queue,确认消息接收。消息发送客户端与接收客户端没有时间上的依赖,发送客户端可以在任何时刻发送信息到Queue,而不需要知道接收客户端是不是在运行。

发布/订阅方式(publish/subscriber Messaging

发布/订阅方式用于多接收客户端的方式.作为发布订阅的方式,可能存在多个接收客户

端,并且接收端客户端与发送客户端存在时间上的依赖。一个接收端只能接收他创建以后发送客户端发送的信息。作为subscriber ,在接收消息时有两种方法,destinationreceive方法,和实现message listener 接口的onMessage 方法。

编程模式

消息产生者向JMS发送消息的步骤

  1. 创建连接使用的工厂类JMS ConnectionFactory
  2. 使用管理对象JMS ConnectionFactory建立连接Connection
  3. 使用连接Connection建立会话Session
  4. 使用会话Session和管理对象Destination创建消息生产者MessageSender
  5. 使用消息生产者MessageSender发送消息

消息消费者从JMS接受消息的步骤

  1. 创建连接使用的工厂类JMS ConnectionFactory
  2. 使用管理对象JMS ConnectionFactory建立连接Connection
  3. 使用连接Connection 建立会话Session
  4. 使用会话Session和管理对象Destination创建消息消费者MessageReceiver
  5. 使用消息消费者MessageReceiver接受消息,需要用setMessageListenerMessageListener接口绑定到MessageReceiver 消息消费者必须实现了MessageListener接口,需要定义onMessage事件方法。

ActiveMQ运行

ActiveMQ5.3版本默认启动时,启动了内置的jetty服务器,提供一个demo应用和用于

监控ActiveMQadmin应用。运行%activemq_home%bin/目录下的 activemq.bat , 之后你会看见如下一段话表示启动成功。

打开http://localhost:8161/admin/queues.jsp ,可以查看相应的queue中是否有

消息,如下截图



  

简单的例子

import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Test {
	public static void main(String[] args) throws JMSException {
		new Receiver().beginReceiveMsg();
		new Sender().send();
	}
}

class Sender {

	static String subject = "TEST";
	static String user = ActiveMQConnection.DEFAULT_USER;
	static String password = ActiveMQConnection.DEFAULT_PASSWORD;
	// failover://tcp://localhost:61616
	static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
	boolean transacted = true;
	boolean persistent = true;
	int ackMode = Session.AUTO_ACKNOWLEDGE;

	Session session;
	Destination destination;
	MessageProducer producer;

	public Sender() throws JMSException {
		ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
				user, password, url);
		Connection connection = connectionFactory.createConnection();
		connection.start();
		session = connection.createSession(transacted, ackMode);
		destination = session.createQueue(subject);
		producer = session.createProducer(destination);
		producer.setDeliveryMode(DeliveryMode.PERSISTENT);
	}

	public void send() throws JMSException {
		MapMessage message = session.createMapMessage();
		message.setString("test", "test");
		message.setStringProperty("RECEIVER_CHAR", " TEST ");
		producer.send(message);
		session.commit();
	}
}

class Receiver implements MessageListener {

	static String subject = "TEST";
	static String user = ActiveMQConnection.DEFAULT_USER;
	static String password = ActiveMQConnection.DEFAULT_PASSWORD;
	// failover://tcp://localhost:61616
	static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
	boolean transacted = true;
	int ackMode = Session.AUTO_ACKNOWLEDGE;

	Session session;
	Destination destination;
	MessageConsumer consumer;

	public Receiver() throws JMSException {
		ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
				user, password, url);
		Connection connection = connectionFactory.createConnection();
		connection.start();
		session = connection.createSession(transacted, ackMode);
		destination = session.createQueue(subject);
		consumer = session.createConsumer(destination, "RECEIVER_CHAR = TEST");
	}

	public void beginReceiveMsg() throws JMSException {
		consumer.setMessageListener(this);
	}

	@Override
	public void onMessage(Message message) {
		if (message instanceof MapMessage) {
			MapMessage msg = (MapMessage) message;
			try {
				System.out.println(msg.getString("test"));
			} catch (JMSException e) {
				try {
					session.rollback();
				} catch (JMSException e1) {
					e1.printStackTrace();
				}
				e.printStackTrace();
			} finally {
				if (session != null) {
					try {
						session.close();
					} catch (JMSException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
	}
}

其他产品

1、开源JMS供应商

  • jbossmq(jboss 4)
  • jboss messaging (jboss 5)
  • joram-4.3.21 2006-09-22
  • openjms-0.7.7-alpha-3.zip December 26, 2005
  • mantamq
  • ubermq
  • SomnifugiJMS 2005-7-27

2、商业JMS供应商

  • IBM WebSphere MQ
  • BEA WebLogic JMS
  • Oracle AQ
  • NonStop Server for Java Message Service(JMS)
  • Sun Java System Message Queue
  • Sonic jms
  • TIBCO Enterprise For JMS
  • iLinkMQ (国内)
  • TongLink/Q(北京东方通科技)

 

 

  • 大小: 33.4 KB
分享到:
评论
2 楼 asuschb 2011-06-30  
对于初学者学习MQ还是有帮助的
1 楼 zhendell 2011-06-29  
不符合直观思维

相关推荐

    ActiveMQ学习笔记(二) JMS与Spring

    在本篇ActiveMQ学习笔记中,我们将探讨JMS(Java Message Service)与Spring框架的集成。JMS是一种标准API,用于在分布式环境中进行异步消息传递,而Spring框架则为开发人员提供了强大的依赖注入和管理服务的能力。...

    永磁同步电机发电给蓄电池充电控制仿真模型解析 - PMSG与双闭环控制技术

    内容概要:本文详细介绍了永磁同步旋转电机(PMSG)发电给蓄电池充电的控制仿真模型。该模型主要由永磁同步发电机、三相整流桥、整流桥控制模块、测量模块和蓄电池组成。文中首先解释了各组件的功能及其相互协作方式,接着重点讨论了整流桥控制模块的转速、电流双闭环控制机制,尤其是PI控制器的应用。此外,还探讨了储能管理和系统性能优化的方法,如通过LC滤波、自适应偏置、在线参数辨识等手段提高系统的稳定性和效率。最后,通过对实际波形的分析展示了系统的优异表现。 适合人群:从事电力系统、新能源领域的研究人员和技术人员,以及对电机控制感兴趣的工程专业学生。 使用场景及目标:适用于研究和开发高效的新能源发电与储能系统,旨在提升发电效率、稳定性和可靠性。具体应用场景包括但不限于风电场、太阳能电站、电动汽车充电站等。 其他说明:文中提供的代码片段和参数配置均为简化版本,实际应用中需根据具体情况进一步调整优化。

    餐饮业人才流失现状分析及对策研究.doc

    餐饮业人才流失现状分析及对策研究

    车辆动力学领域LQR/LQG控制的主动悬架模型研究及其MATLAB/Simulink实现

    内容概要:本文详细探讨了LQR(线性二次调节器)和LQG(线性二次高斯)控制在车辆主动悬架系统中的应用。文章首先介绍了LQR控制的基本原理,即通过状态反馈控制使系统达到最优状态。接着,通过Simulink建立了多种自由度的主动悬架模型(2自由度、4自由度和7自由度),并在MATLAB中实现了相应的控制算法。文中展示了不同自由度模型的关键性能指标对比,如悬架动挠度、簧载质量加速度等,并提供了具体的MATLAB代码示例。此外,文章还讨论了LQG控制中卡尔曼滤波的应用,以及其在处理噪声环境中的优势。 适合人群:从事车辆工程、控制系统设计的研究人员和技术人员,尤其是对主动悬架系统感兴趣的读者。 使用场景及目标:适用于希望深入了解LQR/LQG控制理论及其在车辆主动悬架系统中具体应用的人群。目标是帮助读者掌握如何利用MATLAB/Simulink搭建和优化主动悬架模型,从而提高车辆行驶的舒适性和稳定性。 其他说明:文章不仅提供了理论解释,还包括大量实用的代码片段和图表,便于读者理解和实践。特别强调了在不同自由度模型之间的选择依据,以及LQG控制在实际应用场景中的重要性。

    离职交接表.doc

    离职交接表.doc

    计算机课程设计相关资源

    计算机课程设计相关资源

    MATLAB中滚动轴承二自由度动力学建模与故障动态响应仿真

    内容概要:本文详细介绍了如何使用MATLAB进行滚动轴承的二自由度动力学建模,涵盖正常状态及内外圈、滚动体故障的动态响应仿真。首先建立了二自由度的动力学方程,定义了质量、阻尼和刚度矩阵,并根据不同类型的故障(内圈、外圈、滚动体)设置了相应的故障激励力。通过ODE求解器(如ode45)求解微分方程,得到时域内的振动波形。接着进行了频谱分析,展示了不同状态下频谱图的特点,如内圈故障在转频的倍频处出现峰值,外圈故障在较低频段有特征峰,滚动体故障表现为宽频带特性。此外,还提供了故障特征提取的方法,如包络谱分析。 适用人群:机械工程领域的研究人员和技术人员,特别是从事机械设备故障诊断和预测性维护的专业人士。 使用场景及目标:适用于需要理解和研究滚动轴承在不同工况下的动态行为的研究项目。主要目标是帮助用户掌握如何利用MATLAB进行轴承动力学建模,识别并分析各种故障模式,从而提高设备的可靠性和安全性。 其他说明:文中提供的代码可以直接用于实验验证,同时给出了许多实用的提示和注意事项,如选择合适的ODE求解器、合理设置故障幅值以及避免数值发散等问题。

    低通滤波器:滤波算法及其在传感器数据处理中的应用

    内容概要:本文详细介绍了低通滤波器的基本概念、不同类型的滤波算法以及它们的应用场景。首先解释了简单的移动平均滤波,这是一种常用且易实现的方法,适用于快速去除高频噪声。接着深入探讨了一阶RC低通滤波器的工作原理和实现方式,强调了alpha系数的选择对滤波效果的影响。此外,还提到了基于环形缓冲区的实时滤波技术和更高阶的巴特沃斯滤波器,后者提供了更好的频率选择性和稳定性。文中通过多个实例展示了如何根据具体的传感器数据特点选择合适的滤波算法,并给出了相应的Python代码片段用于演示和验证。 适合人群:从事嵌入式系统开发、传感器数据分析及相关领域的工程师和技术爱好者。 使用场景及目标:帮助开发者理解和掌握不同类型低通滤波器的特点与实现方法,以便更好地应用于实际项目中,如处理陀螺仪、温度传感器、心率传感器等设备的数据,提高信号质量和系统的可靠性。 其他说明:文章不仅提供了理论知识,还包括了许多实用技巧和注意事项,如滤波器参数的选择、初始化处理、采样率稳定性等问题,这些都是确保滤波效果的关键因素。同时,附带的代码示例可以帮助读者更快地上手实践。

    基于自抗扰控制(ADRC)的永磁同步电机(PMSM)矢量控制技术及其实现

    内容概要:本文深入探讨了基于自抗扰控制(ADRC)的永磁同步电机(PMSM)矢量控制技术。首先介绍了PMSM的特点及其广泛应用背景,强调了矢量控制在实现电机高性能控制方面的重要性。针对传统矢量控制存在的不足,引入了ADRC这一新型控制策略,详细解释了ADRC的工作原理,包括跟踪微分器(TD)、扩张状态观测器(ESO)和非线性状态误差反馈控制律(NLSEF)三个组成部分的功能。随后展示了如何将ADRC应用于PMSM的电流环和速度环控制中,并提供了具体的Python代码实现示例。实验结果显示,在面对负载变化等扰动情况下,采用ADRC的控制系统表现出更好的稳定性和平滑性。 适用人群:从事电机控制领域的研究人员和技术人员,特别是那些希望深入了解并掌握先进控制算法的人群。 使用场景及目标:适用于需要提高永磁同步电机控制系统鲁棒性和响应速度的应用场合,如工业自动化设备、电动汽车等领域。目标是帮助读者理解ADRC的基本概念及其在PMSM矢量控制中的具体应用,从而能够在实际项目中实施该技术。 其他说明:文中还讨论了一些实用技巧,如参数调整的方法和注意事项,以及与其他控制方法(如PI控制)的性能对比。此外,作者鼓励读者尝试不同的参数配置以找到最适合特定应用场景的最佳设置。

    外贸公司员工离职流程及工作交接程序.xls

    外贸公司员工离职流程及工作交接程序.xls

    基于博途1200PLC的教学楼打铃控制系统:数码管显示与定时打铃的实现

    内容概要:本文详细介绍了基于西门子S7-1200 PLC的教学楼打铃控制系统的设计与实现。硬件方面,采用4位7段共阳数码管直接连接PLC的DO点,通过中间继电器或晶体管输出型PLC确保电流足够。软件部分,使用SCL语言编写动态扫描程序,实现数码管的时间显示,并通过系统时钟和定时器实现精确的打铃控制。此外,文章还讨论了数码管显示调试中的常见问题及其解决方案,如鬼影消除、段码转换和时间同步等。 适合人群:具备PLC编程基础的技术人员,尤其是对工业自动化感兴趣的工程师。 使用场景及目标:适用于需要构建或维护教学楼打铃系统的学校和技术爱好者。目标是掌握PLC编程技巧,理解数码管显示和定时控制的工作原理,以及提高对硬件配置和调试的理解。 其他说明:文中提供了详细的代码片段和硬件配置建议,帮助读者更好地理解和实施该项目。同时,强调了项目中的挑战和解决方案,使读者能够避免常见的错误并优化系统性能。

    三菱PLC与显触摸屏实现定长送料系统的伺服/步进控制

    内容概要:本文详细介绍了如何利用三菱PLC(具体型号为FX5U-32MT)和显触摸屏构建定长送料控制系统。该系统支持伺服和步进电机两种驱动方式,涵盖了点动、相对定位和绝对定位三大核心功能。文中不仅提供了详细的硬件连接方法,还展示了具体的PLC梯形图编程实例,以及触摸屏界面的设计要点。特别强调了调试过程中可能遇到的问题及其解决方案,如电子齿轮比计算错误、绝对定位前的原点回归、急停信号的正确接入等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些对PLC编程和伺服/步进电机控制有一定基础的人群。 使用场景及目标:适用于需要精确控制物料长度的场合,如包装、切割等行业。通过该系统可以提高生产效率,减少人工干预,确保送料精度达到±0.02mm。此外,还可以帮助用户掌握PLC编程技巧,提升对伺服/步进电机的理解。 其他说明:文章中提到的一些关键技术点,如点动模式的手动微调、绝对定位的坐标系建立、相对定位的连续作业优化等,对于理解和实施类似的自动化项目非常有帮助。同时,作者分享了许多宝贵的实践经验,有助于读者避开常见陷阱并顺利完成项目部署。

    信号处理领域中基于EMD及其改进方法的信号降噪与性能评估

    内容概要:本文详细介绍了如何利用经验模态分解(EMD)及其两种改进方法——集合经验模态分解(EEMD)和互补集合经验模态分解(CEEMDAN),来进行信号降噪。首先构建了一个由多个正弦波组成的混合信号并加入高斯噪声,随后使用三种方法对该带噪信号进行了分解,通过相关系数筛选有效的固有模态函数(IMF),最终重构信号并评估降噪效果。文中提供了详细的Python代码实现,包括信号生成、分解、重构以及性能评估的具体步骤。性能评估主要采用信噪比(SNR)和均方误差(MSE)作为衡量标准,结果显示CEEMDAN在降噪方面表现出色。 适合人群:从事信号处理领域的研究人员和技术人员,尤其是那些希望深入了解EMD系列算法及其应用的人群。 使用场景及目标:适用于需要对含噪信号进行预处理的各种应用场景,如机械故障诊断、生物医学工程等领域。目标是提高信号的质量,从而更好地支持后续的数据分析和决策制定。 其他说明:文中不仅提供了完整的代码实现,还讨论了不同参数的选择对降噪效果的影响,强调了实际应用中需要注意的问题,如计算资源限制、信号特性的考虑等。此外,作者鼓励读者尝试将仿真信号替换为实际数据,以便更好地理解和掌握这些方法的应用技巧。

    医学图像分割数据集:眼底血管图像语义分割数据集(约48张数据和标签)

    医学图像分割数据集:眼底血管图像语义分割数据集(约48张数据和标签) 【2类别的分割】:背景:0,1:眼底血管(具体参考classes文件) 数据集介绍:【已经划分好】 训练集:images图片目录+masks模板目录,34张左右图片和对应的mask图片 验证集:images图片目录+masks模板目录,10张左右图片和对应的mask图片 测试集:images图片目录+masks模板目录,4张左右图片和对应的mask图片 除此之外,包含一个图像分割的可视化脚本,随机提取一张图片,将其原始图片、GT图像、GT在原图蒙板的图像展示,并保存在当前目录下 医学图像分割网络介绍:https://blog.csdn.net/qq_44886601/category_12102735.html 更多图像分割网络unet、swinUnet、trasnUnet改进,参考改进专栏:https://blog.csdn.net/qq_44886601/category_12803200.html

    汽车工程中MATLAB/Simulink实现电动助力转向(EPS)系统的企业级量产模型

    内容概要:本文详细介绍了如何利用MATLAB和Simulink构建并优化电动助力转向(EPS)系统的企业级量产模型。首先探讨了随速助力曲线的设计,展示了如何通过车速和手力矩传感器输入计算助力扭矩。接着深入讲解了Simulink ASW(应用软件层)子系统的具体实现,包括移动平均滤波、助力特性模块、状态机设计以及回正控制等关键技术环节。文中还特别强调了处理现实世界非线性的挑战,如温度补偿、摩擦补偿和故障诊断方法。此外,讨论了手力闭环控制、PID调节、状态机设计以及摩擦模型简化等方面的技术细节,并提到了模型在环测试(MIL)、硬件在环测试(HIL)等验证手段。 适合人群:从事汽车电子控制系统开发的研究人员和技术工程师,尤其是对电动助力转向系统感兴趣的开发者。 使用场景及目标:适用于希望深入了解EPS系统内部工作原理及其优化方法的专业人士。主要目标是帮助读者掌握如何使用MATLAB/Simulink搭建高效可靠的EPS模型,从而应用于实际产品开发中。 其他说明:文章不仅提供了理论知识,还包括了许多实用的代码片段和实践经验分享,有助于读者更好地理解和应用相关技术。

    51单片机光照强度检测系统的实现与优化:滑动变阻器模拟光敏电阻的应用

    内容概要:本文详细介绍了基于51单片机的光照强度检测系统的设计与实现。主要采用滑动变阻器模拟光敏电阻,通过ADC0804进行模数转换,最终在LCD显示屏上显示光照强度等级。文中不仅提供了详细的硬件连接方法,如滑动变阻器与ADC0804的连接、单片机控制ADC的启动和读数等,还包括了完整的C语言源代码,涵盖了ADC读取、数据处理、阈值判断以及Protues仿真的具体步骤。此外,作者还分享了一些实用的调试技巧,如使用_nop_()指令保证信号稳定、加入滤波算法提高数据准确性等。 适合人群:具有一定单片机基础知识的学习者、电子爱好者、初学者及希望深入了解ADC工作的工程师。 使用场景及目标:①帮助读者掌握51单片机与ADC的工作原理及其应用;②提供一种低成本、易操作的光照检测解决方案;③通过实例演示,让读者学会如何进行硬件连接、编写相关程序并解决常见问题。 其他说明:文章强调了硬件连接的注意事项,如ADC0804的CLK引脚接法、滑动变阻器的设置范围等,并给出了具体的代码实现,便于读者理解和实践。同时,还提到了一些优化措施,如加入抗干扰设计、改进数据处理算法等,进一步提升了系统的性能。

    基于Comsol的三轴试验数值模拟:D-C、D-P、M-C准则的应用与实现

    内容概要:本文详细介绍了如何利用Comsol软件结合邓肯张(D-C)、德鲁克普拉格(D-P)和摩尔库伦(M-C)准则进行三轴试验的数值模拟。首先简述了各准则的基本概念及其适用范围,接着逐步讲解了在Comsol中创建土样模型、设定材料属性、施加边界条件和载荷的具体步骤。随后,文章展示了求解过程及结果分析方法,强调了通过数值模拟生成应力-应变曲线并与实际试验数据对比的重要性。此外,文中还提供了许多实用技巧,如参数设置、加载步控制、网格划分等,帮助提高模拟精度和效率。 适合人群:从事岩土工程研究的技术人员、研究生及以上学历的研究人员。 使用场景及目标:适用于需要深入了解土体力学特性的科研工作者,旨在通过数值模拟辅助实际三轴试验,减少实验成本并提升研究深度。具体目标包括掌握不同准则的特点及应用场景,学会使用Comsol进行三轴试验建模与仿真,能够根据模拟结果优化试验设计。 其他说明:文章不仅涵盖了理论知识和技术细节,还分享了许多实践经验,有助于读者更好地理解和应用所学内容。

    tesseract-langpack-aze-cyrl-4.0.0-6.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统tesseract-langpack-aze_cyrl-4.0.0-6.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tesseract-langpack-aze_cyrl-4.0.0-6.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

    星级酒店员工培训手册.doc

    星级酒店员工培训手册

    tesseract-langpack-dan-4.0.0-6.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统tesseract-langpack-dan-4.0.0-6.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tesseract-langpack-dan-4.0.0-6.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

Global site tag (gtag.js) - Google Analytics