© PA Photos
Milan could barely string two passes together in the opening exchanges and soon Barca were ahead.
Messi exchanged passes with Xavi Hernandez on the edge of the area before shifting the ball onto his left foot and curling it into the top corner, with Milan stopper Christian Abbiati only able to watch it fly past.
Milan had a chance to get a goal when Stephan El Shaarawy picked up the ball in the area but he was driven wide by two Barca defenders and duffed his shot.
The hosts could have had a penalty soon after but referee Viktor Kassai felt that Ignacio Abate did not unfairly push Pedro, who had got in on the wrong side of the Italian.
Moments later Barca hit the bar when Andres Iniesta swiped a volley goalwards and Abbiati was at full stretch in tipping it against the upright. The ball fell to Messi but he headed into the side net from a tight angle.
El Shaarawy had another half-chance but weakly hit his shot at Victor Valdes before a golden chance for Milan to get an away goal was squandered.
Javier Mascherano misjudged a long ball and M'Baye Niang had a free run at goal but hit the foot of the post.
The Rossoneri were punished seconds later when Messi collected the ball on the edge of the area and beat Abbiati at his near post with a low strike.
© PA Photos
Follow live text coverage of the second half by clicking here.