Barca beat Atletico as champions Real slip up
The victory moved Barca 13 points ahead of ailing champions Real Madrid, who were surprisingly held to a 2-2 draw at home by lowly Espanyol.
Tito Vilanova's unbeaten leaders fought back after Radamel Falcao gave Atletico a deserved lead. A magnificent strike from Adriano levelled the scores, and Sergio Busquets and a second-half brace from Messi completed the scoring.
Barca have 46 points from 16 games, Atletico have 37 and Real 33.
"You can't say the league is over," Real midfielder Xabi Alonso told Spanish television after their earlier game.
"We will continue fighting, it will be tough, but we will carry on."
Atletico made an impressive start, causing problems on the break, and after twice going close, Colombia striker Falcao put the visitors ahead in the 32nd minute with his 17th of the campaign.
Diego Costa stole the ball off Messi and fed Falcao who sped away and cleverly lobbed the advancing Victor Valdes.
Five minutes later, Barca were back in the game thanks to a thunderous shot from Adriano, who cut in from the right flank and fired in off the underside of the crossbar.
Atletico were struggling to break out of the area before halftime, and when they failed to clear a corner, Busquets calmly stroked home the second.
After the break, Messi slotted a third into the corner and then pounced on an error at the end for his 25th in La Liga and 90th for club and country in 2012.
Espanyol substitute Juan Albin stunned Real with an 88th-minute equaliser as the Barcelona-based side grabbed an unlikely draw at the Bernabeu.
The Uruguayan forward bundled the ball in after Real failed to clear a corner, and whistles rang around the ground as the teams filed off the pitch at the end.
Karim Benzema was left in the stands with an ankle injury, and Cristiano Ronaldo started in the centre-forward position, but for all their possession Real struggled in the first half.
Visiting striker Sergio Garcia, a Euro 2008 winner with Spain, sprinted clear to net past Iker Casillas in the 31st minute.
Luka Modric crashed a shot against the post, but just as the Bernabeu was getting restless Sami Khedira crossed and Ronaldo stuck out a foot to level in the 45th minute.
Ronaldo's reverse pass picked out Fabio Coentrao's driving run, and the Portugal defender put Real ahead with his first league goal for the club, soon after the re-start.
A fingertip save and the woodwork prevented a quick third for Real, but Espanyol continued to threaten and Albin made them pay for failing to finish off the job.
Earlier, Rayo Vallecano scored a late penalty to spoil Ernesto Valverde's home debut as Valencia coach, with a surprise 1-0 victory.